boost shared_ptr 初始化为 class 成员
boost shared_ptr initialize as class member
我在初始化 boost::shared_ptr
时遇到问题,因为它是 class 的成员变量。我看到了上一个问题:
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
可以正常编译。我正在 Ubuntu 14.04 机器上为 Intel Edison 交叉编译。
我错过了什么?
您正在寻找mA.reset(new A());
共享指针现在也是标准的一部分,所以你应该使用std::shared_ptr
我在初始化 boost::shared_ptr
时遇到问题,因为它是 class 的成员变量。我看到了上一个问题:
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
可以正常编译。我正在 Ubuntu 14.04 机器上为 Intel Edison 交叉编译。
我错过了什么?
您正在寻找mA.reset(new A());
共享指针现在也是标准的一部分,所以你应该使用std::shared_ptr