【发布时间】:2012-06-21 20:59:27
【问题描述】:
我想我可能需要在我的应用程序中执行类似以下伪代码的操作:
boost::shared_ptr<T> p;
...
...
p = boost::shared_ptr<T>(new T);
我意识到使用赋值运算符还有其他选项,但我在boost::shared_ptr 文档/示例中注意到他们从未讨论过像这样涉及默认构造函数的案例。
我想我的问题是:这是有效的用途吗?换句话说,它是否合法,是否会导致潜在的内存泄漏?感谢任何想法/更正。非常感谢!
注意:我记得读过,正如下面的一些 cmets 所建议的那样,他们建议在使用 new 调用构造函数时始终使用命名的 shared_ptr。尽管如此,我还是很难想象这会造成任何伤害。如果您有任何反例,请发布它们。谢谢!
【问题讨论】:
-
这违反了安全使用智能指针的第一条规则:"always use a named smart pointer variable to hold the result of new."(代码原样出现对我来说是安全的,因为
operator=被指定为不抛出. 但是,最好始终遵循此最佳实践。养成良好的习惯是件好事,它可以帮助您不必担心您的代码是否安全。)跨度> -
是的,我记得文档中的评论..因此是这个问题。不过似乎足够无害。这怎么会破坏任何东西?
-
@squashed.bugaboo : 与其说能够打破任何东西,不如说是惯用的和不令人惊讶的。
-
我不知道它会破坏什么。我的脑力有限;遵循最佳实践有助于我不要浪费它。
-
谢谢@James/ildjarn:很好,James :-) 会尝试遵循这一点,但我认为我必须重新编写代码以适应格言,我是争论这是否真的有必要。再次感谢!
标签: c++ boost shared-ptr