我目前正在学习智能指针,并且实际上也在我的代码中使用它们。但是,我想重读有关智能指针的文档,并在MSDN中遇到了这一行(https://msdn.microsoft.com/de-de/library/hh279669.aspx):
shared_ptr<Song> sp5 = NULL;
现在我在我的头文件中使用它:
{{1}}
我现在尝试了几次但是我无法在没有出现大量错误的情况下让MSDN示例正常工作,但在尝试找出问题时,资源方面并没有太多甚至告诉我初始化这样的智能指针。
是否真的有必要像MSDN建议的那样解决它?
答案 0 :(得分:2)
不,没有必要。初始化智能指针没有“正确”的方法。
正如评论本身所示,您可以安全地省略初始化。
答案 1 :(得分:1)
对于初始化我只会写。
shared_ptr<Song> sp5;
然后分配新指针或使用
sp5.reset(new Song());
使用
进行初始化shared_ptr<Song> sp5(nullptr);
用于表明您希望sharded_ptr在开头为空。 但我个人会建议你,当你使用null shared_ptrs来检查它们是否为null之前使用它们。 shared_ptr operator bool检查指针是否为空。 http://www.cplusplus.com/reference/memory/shared_ptr/operator%20bool/