提升shared_ptr使用默认构造函数

boost shared_ptr use with default constructor

本文关键字:默认 构造函数 ptr shared 提升      更新时间:2023-10-16

我想我可能需要在我的应用程序中执行类似于以下伪代码的操作:

boost::shared_ptr<T> p;
...
...
p = boost::shared_ptr<T>(new T);

我意识到还有其他使用赋值运算符的选项,但我在boost::shared_ptr文档/示例中注意到,他们从未讨论过像这样涉及默认构造函数的情况。

我想我的问题是:这是有效的用途吗?换句话说,它是否合法,是否会导致潜在的内存泄漏?感谢任何想法/更正。多谢!

注意:我确实记得阅读过,正如下面的一些评论所建议的那样,他们建议在调用带有 new 的构造函数时始终使用命名shared_ptr。不过,我发现很难想象这可能会造成任何伤害。如果您有任何反例,请发布它们。谢谢!

这是完全合法且内存安全的。 在 T 上调用默认构造函数这一事实无关紧要:只要您有一个动态分配的对象,您就可以将其包装在shared_ptr<>

如果您引用 shared_ptr<> 的默认构造函数,那也没关系:包装的指针为 NULL,当分配其他shared_ptr<>时不会删除

您必须小心,但要检查内容是否为NULL,否则您可能会访问无效的指针