use*_*538 -3 c++ constructor smart-pointers shared-ptr
我有一个类Foo,其中包含一个shared_ptrclass Foo2作为成员变量。我这样宣告以上观点:
class Foo{
public:
Foo();
private:
shared_ptr<Foo2> f2;
};
Run Code Online (Sandbox Code Playgroud)
首先,我可以做以上吗?即不初始化shared_ptr?
在Foo我的默认构造函数中,如下所示初始化了shared_ptr变量:
Foo::Foo(){
//create and calculate parameters a, b and c
f2(new Foo2(a, b, c));
}
Run Code Online (Sandbox Code Playgroud)
由于Foo2的唯一构造函数具有3个参数。但是,这显示了一个错误:
Type 'shared_ptr<Foo2>' does not provide a call operator
这不是创建类的共享指针实例的方法吗?
如果a,b并且c只在构造函数创建的,则必须重新分配f2。您不能在变量的声明或成员初始值设定项列表之外初始化变量(这是您试图执行的操作)。
以下任何一项均可使用:
f2.reset(new Foo2(a, b, c));
f2 = std::shared_ptr<Foo2>(new Foo2(a, b, c));
f2 = std::make_shared<Foo2>(a, b, c);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |