【发布时间】:2015-12-11 01:03:38
【问题描述】:
我有这些课程:
class A
{
public:
A(std::shared_ptr<SomeClass> p);
private:
std::shared_ptr<SomeClass> _p;
};
class B
{
public:
B(std::shared_ptr<SomeClass> p);
private:
std::shared_ptr<SomeClass> _p;
};
class Foo
{
public:
Foo();
private:
A _a;
B _b;
};
来自A 和B 的两个构造函数参数共享相同的指针引用shared_ptr。在这种情况下:
初始化
Foo的最佳方式是什么?是否还可以在
Foos 构造函数中使用初始化列表?
我很困惑,因为两个类都需要相同的shared_ptrinstance,所以我必须将该指针存储在某个地方,而且我认为初始化列表不可能做到这一点。
另外,如果初始化发生在构造函数的主体中,这意味着A 和B 都应该有一个move 构造函数,对吗?因为我必须这样做:
Foo::Foo() //: Cannot use initializer list
{
auto ptr = std::make_shared<SomeClass>(SomeClass());
_a = A(ptr);
_b = B(ptr);
}
【问题讨论】:
标签: c++ constructor shared-ptr initializer-list