草庐IT

silly_ptr

全部标签

c++ - std::shared_ptr 和继承

我在继承类的shared_ptr之间的自动类型转换方面遇到了一些问题。我的类结构如下,一个基类Base和两个派生类Derived1和Derived2。//BaseclassclassBase{protected:......public:Base()=default;virtual~Base()=default;virtualvoidrun()=0;......};//DerivedclassclassDerived1:Base{protected:......public:Derived1()=default;virtual~Derived1()=default;voidrun(){

c++ - std::shared_ptr 和继承

我在继承类的shared_ptr之间的自动类型转换方面遇到了一些问题。我的类结构如下,一个基类Base和两个派生类Derived1和Derived2。//BaseclassclassBase{protected:......public:Base()=default;virtual~Base()=default;virtualvoidrun()=0;......};//DerivedclassclassDerived1:Base{protected:......public:Derived1()=default;virtual~Derived1()=default;voidrun(){

c++ - 将 std::unique_ptr 返回到多态类对象的正确方法

假设我有以下类层次结构:structBase{};structDerived:publicBase{voidDoStuffSpecificToDerivedClass(){}};还有以下工厂方法:std::unique_ptrfactoryMethod(){autoderived=std::make_unique();derived->DoStuffSpecificToDerivedClass();returnderived;//doesnotcompile}问题是,return语句无法编译,因为std::unique_ptr没有支持协方差的复制构造函数(这是有道理的,因为它没有有任何

c++ - 将 std::unique_ptr 返回到多态类对象的正确方法

假设我有以下类层次结构:structBase{};structDerived:publicBase{voidDoStuffSpecificToDerivedClass(){}};还有以下工厂方法:std::unique_ptrfactoryMethod(){autoderived=std::make_unique();derived->DoStuffSpecificToDerivedClass();returnderived;//doesnotcompile}问题是,return语句无法编译,因为std::unique_ptr没有支持协方差的复制构造函数(这是有道理的,因为它没有有任何

c++ - unique_ptr 和多态性

我有一些当前使用原始指针的代码,我想更改为智能指针。这有助于以各种方式清理代码。无论如何,我有返回对象的工厂方法以及调用者管理它们的责任。所有权不共享,所以我认为unique_ptr是合适的。我返回的对象通常都派生自一个基类Object。例如,classObject{...};classNumber:publicObject{...};classString:publicObject{...};std::unique_ptrState::NewNumber(doublevalue){returnstd::unique_ptr(newNumber(this,value));}std::u

c++ - unique_ptr 和多态性

我有一些当前使用原始指针的代码,我想更改为智能指针。这有助于以各种方式清理代码。无论如何,我有返回对象的工厂方法以及调用者管理它们的责任。所有权不共享,所以我认为unique_ptr是合适的。我返回的对象通常都派生自一个基类Object。例如,classObject{...};classNumber:publicObject{...};classString:publicObject{...};std::unique_ptrState::NewNumber(doublevalue){returnstd::unique_ptr(newNumber(this,value));}std::u

c++ - 在嵌入式环境中替代 boost::shared_ptr

我在具有GCC版本2.95的嵌入式linux环境中使用C++。我无法用bcp提取boost::shared_ptr文件,它太重了。我想要的是boost::shared_ptr的简单智能指针实现,但没有所有boost开销(如果可能的话......)。我可以想出我自己的版本阅读boost源,但我担心会漏掉一个或多个点,制造一个错误的智能指针似乎很容易,而且我不能承受有错误的实现。那么,boost::shared_ptr(或任何引用计数等效智能指针)的“简单”实现或实现示例是否存在我可以使用或可以作为灵感的? 最佳答案 如果您不需要混合s

c++ - 在嵌入式环境中替代 boost::shared_ptr

我在具有GCC版本2.95的嵌入式linux环境中使用C++。我无法用bcp提取boost::shared_ptr文件,它太重了。我想要的是boost::shared_ptr的简单智能指针实现,但没有所有boost开销(如果可能的话......)。我可以想出我自己的版本阅读boost源,但我担心会漏掉一个或多个点,制造一个错误的智能指针似乎很容易,而且我不能承受有错误的实现。那么,boost::shared_ptr(或任何引用计数等效智能指针)的“简单”实现或实现示例是否存在我可以使用或可以作为灵感的? 最佳答案 如果您不需要混合s

c++ - 我应该在移动构造函数中 std::move 一个 shared_ptr 吗?

考虑:#include#include#include#include#include#includeusingnamespacestd;classGizmo{public:Gizmo():foo_(shared_ptr(newstring("bar"))){};Gizmo(Gizmo&&rhs);//ImplementedBelowprivate:shared_ptrfoo_;};/*//doesn'tusestd::moveGizmo::Gizmo(Gizmo&&rhs):foo_(rhs.foo_){}*///Doesusestd::moveGizmo::Gizmo(Gizmo&

c++ - 我应该在移动构造函数中 std::move 一个 shared_ptr 吗?

考虑:#include#include#include#include#include#includeusingnamespacestd;classGizmo{public:Gizmo():foo_(shared_ptr(newstring("bar"))){};Gizmo(Gizmo&&rhs);//ImplementedBelowprivate:shared_ptrfoo_;};/*//doesn'tusestd::moveGizmo::Gizmo(Gizmo&&rhs):foo_(rhs.foo_){}*///Doesusestd::moveGizmo::Gizmo(Gizmo&