Zha*_*eng 4 c++ initialization class smart-pointers copy-initialization
当我想向类添加智能指针类型的成员变量时,我发现它无法在声明处初始化:
class Foo {
public:
std::shared_ptr<int> intSharedPtr = new int; // not ok
Foo() {}
};
Run Code Online (Sandbox Code Playgroud)
但我可以这样做:
class Foo {
public:
std::shared_ptr<int> intSharedPtr; // ok
int* intPtr = new int; // ok
Foo() {
intSharedPtr.reset(new int);
}
};
Run Code Online (Sandbox Code Playgroud)
看来智能指针与普通指针有很大不同,为什么会出现这种情况呢?
son*_*yao 10
std::shared_ptr无法从原始指针复制初始化,转换构造函数被标记为explicit.
您可以使用直接初始化:
class Foo {
public:
std::shared_ptr<int> intSharedPtr {new int};
Foo() {}
};
Run Code Online (Sandbox Code Playgroud)
或者从以下位置初始化std::shared_ptr:
class Foo {
public:
std::shared_ptr<int> intSharedPtr = std::shared_ptr<int>(new int);
Foo() {}
};
Run Code Online (Sandbox Code Playgroud)
并且更好地使用std::make_shared:
class Foo {
public:
std::shared_ptr<int> intSharedPtr = std::make_shared<int>();
Foo() {}
};
Run Code Online (Sandbox Code Playgroud)