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

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

本文关键字:方法 是什么 变量 智能 指针 成员 初始化      更新时间:2023-10-16

我目前正在学习智能指针,并在代码中实际使用了它们。然而,我想重读关于智能指针的文档,在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建议的那样解决它吗?

不,没有必要。没有"正确"的方式初始化智能指针。

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

对于初始化,我只想写。

shared_ptr<Song> sp5;

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

sp5.reset(new Song());

用实现

shared_ptr<Song> sp5(nullptr);

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