使用默认构造函数提升shared_ptr

时间:2012-06-21 20:59:28

标签: c++ boost shared-ptr

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

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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