C ++ shared_ptr不提供调用运算符

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

这不是创建类的共享指针实例的方法吗?

Max*_*hof 7

如果ab并且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)