【发布时间】:2013-09-11 10:33:46
【问题描述】:
我有一些参数化类,其指针私有成员实现为std::shared_ptr。事实上,这个指针是一个指向参数化(模板)结构的指针。还有一个方法返回相同的指针。但没有包裹在std::shared_ptr 中。它看起来像这样:
template<typename SomeType> class SomeClass{
private:
std::shared_ptr<SomeStruct<SomeType>> ptr; // pointer
SomeStruct<SomeType>* someMethod(...); // method
};
在我的某个班级方法中,我希望有以下任务:
ptr = someMethod(..);
正确吗?事实上,我希望这个方法在需要时分配内存,然后这个指针由shared_ptr 管理。我收到一个错误,指出未找到正确的 operator=。我应该首先在我的方法中包装最近分配的对象的指针吗?
【问题讨论】:
-
你可以用构造函数包装它,或者更简单,用“make_shared”进行分配
-
请从不返回原始指针,返回智能指针。如果函数的用户执行
delete call_to_function_which_returns_pointer()并且该函数是工厂会发生什么? -
另请注意,return-raw-pointer 函数接口并没有清楚地显示返回对象(Pointed by)的所有权。 Herb Sutter 写了一篇关于这个的 GoTW,但我没有找到。
-
@Manu343726 这也是私有方法的规则吗? (这个方法实际上是私有的)。
-
可能不会,因为您在内部管理数据。 但是使用智能指针更容易不用担心指针的生命周期/所有权。所以总是使用智能指针,它们让你的生活更轻松
标签: c++ pointers c++11 stl shared-ptr