【发布时间】:2019-05-25 14:20:56
【问题描述】:
正如 wiki 所示,shared_ptr 可以处理堆空间回收问题。
所以,我总是用shared_ptr来创建实例,有什么问题吗?
我就这样用,不用delete s吧?
s = std::shared_ptr<S>(new S).get();
【问题讨论】:
-
这不是您仅有的两个选择。赤裸裸的
new很少是最佳选择,但您还有其他内存管理助手。std::unique_ptr通常很有用。如果您有很多对象,您通常可以将管理留给container 等。这取决于您要完成的任务。 -
好吧,您不必在示例中删除
s,它将在同一行中为您删除。std::shared_ptr(new S)创建临时的shared_ptr,它在表达式评估期间存在,并且您不将其分配给任何变量。所以它马上就被摧毁了。shared_ptr并没有神奇地“处理堆空间回收问题”,你还是要正确使用它。也许 unique_ptr 更好?但这个话题太宽泛,无法评论或单一答案。我建议从这里开始:stackoverflow.com/questions/106508/… -
使用
unique_ptr,除非您确实需要共享所有权。 -
C++
shared_ptr模仿 Java 或 C# 的共享引用语义,但根据我的 C++ 经验,拥有更严格的所有权模式要好得多。我尽可能推荐unique_ptr,如果您需要,我推荐shared_ptr,而不是作为首选。 -
你真的需要指针吗?默认情况下使用
S s;,除非您出于某种原因确实需要在堆上使用它。
标签: c++ class memory std shared-ptr