初始化智能指针成员变量的正确方法是什么?

What is the correct way of initializing a smart pointer member variable?

我目前正在学习智能指针,并且实际上也在我的代码中使用了它们。但是,我想重新阅读有关智能指针的文档,并在 MSDN (https://msdn.microsoft.com/de-de/library/hh279669.aspx) 中看到了这一行:

// When initialization must be separate from declaration, e.g. class members, 
// initialize with nullptr to make your programming intent explicit.
shared_ptr<Song> sp5(nullptr);
//Equivalent to: shared_ptr<Song> sp5;

现在我正在我的头文件中使用它:

shared_ptr<Song> sp5 = NULL;

我现在尝试了几次,但如果没有弹出一堆错误,我无法真正让 MSDN 示例工作,但是当试图找出问题时,就资源而言并没有太多甚至告诉我像这样初始化智能指针。

真的有必要像MSDN建议的那样解决吗?

不,没有必要。没有 "correct" 初始化智能指针的方法。

如评论本身所示,您可以安全地省略初始化程序。

对于初始化我会写。

shared_ptr<Song> sp5;

然后分配一个新指针或使用

sp5.reset(new Song());

初始化为

shared_ptr<Song> sp5(nullptr);

表明您希望 sharded_ptr 在开始时为 null。 但我个人会建议你,当你处理 null shared_ptrs 时,在使用它们之前检查它们是否为 null。 shared_ptr operator bool 检查指针是否不为空。 http://www.cplusplus.com/reference/memory/shared_ptr/operator%20bool/