boost shared_ptr 初始化为类成员
Posted
技术标签:
【中文标题】boost shared_ptr 初始化为类成员【英文标题】:boost shared_ptr initialize as class member 【发布时间】:2015-04-10 20:34:55 【问题描述】:当boost::shared_ptr
是类的成员变量时,我在初始化它时遇到问题。我看到了这个以前的问题:
How to initialize a shared_ptr that is a member of a class?
但是我仍然遇到编译器错误。快速示例代码:
class A
public:
A();
;
class B
public:
B();
private:
boost::shared_ptr<A> mA;
foo()
// the line below generates a compiler error
mA(new A()); // ERROR
// below will work....
boost::shared_ptr<A> tmp(new A()); //OK
mA = tmp;
;
编译器抱怨:
error: no match for call to "(boost::shared_ptr<A>) (A*)"
但是,创建一个 tmp shared_ptr
然后将其分配给 mA
可以正常编译。我正在为 Intel Edison 的 Ubuntu 14.04 机器上进行交叉编译。
我错过了什么?
【问题讨论】:
使用构造函数初始化列表 -foo() : mA(new A()) ...
或 foo() : mA(boost::make_shared<A>()) ...
这与shared_ptr
没有任何关系,如果mA
是int
,那么在构造函数中尝试执行mA(0)
也会遇到同样的问题身体。成员在构造函数主体开始时已经初始化,因此您需要更早地初始化它们(在 mem-initializer 列表中)或在主体中分配给它们。获得一本关于 C++ 的好书。
我不同意。如果 mA 是一个 int 我会使用 mem-initializer 列表,或者在构造函数主体中设置它,ma = 2 或其他。这是我初始化shared_ptr的无知,我发布了这个问题。
【参考方案1】:
您正在寻找mA.reset(new A());
现在共享指针也是标准的一部分,所以你应该使用std::shared_ptr
【讨论】:
这就解决了。谢谢。也切换到 std::shared_ptr以上是关于boost shared_ptr 初始化为类成员的主要内容,如果未能解决你的问题,请参考以下文章