【发布时间】: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的无知,我发布了这个问题。
标签: c++ boost shared-ptr intel-edison