3

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

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

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

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

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

4

1 回答 1

4

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

如果你引用默认构造函数也可以:包装指针为NULL,在分配shared_ptr<>另一个时不会被删除shared_ptr<>

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

于 2012-06-21T21:01:53.177 回答