我想我可能需要在我的应用程序中执行类似下面的伪代码:
boost::shared_ptr<T> p;
...
...
p = boost::shared_ptr<T>(new T);
我意识到使用赋值运算符还有其他选项,但我在boost::shared_ptr
文档/示例中注意到他们从未讨论过像这样涉及默认构造函数的情况。
我想我的问题是:这是否有效?换句话说,它是否合法,是否会导致潜在的内存泄漏?欣赏任何想法/更正。非常感谢!
注意:我确实记得阅读,以及下面的一些评论建议,他们建议在使用shared_ptr
调用构造函数时始终使用命名new
。尽管如此,我发现很难想象这可能会造成任何伤害。如果您有任何反例,请发布任何反例。谢谢!
答案 0 :(得分:4)
完全合法且内存安全。您在T
上调用默认构造函数的事实是无关紧要的:只要您有一个动态分配的对象,就可以将其包装在shared_ptr<>
如果您引用shared_ptr<>
的默认构造函数也没关系:包装指针为NULL,在分配另一个shared_ptr<>
时不会删除
你必须小心,但要检查内容是否为NULL,否则你可能正在访问无效指针