【问题标题】:Create a shallow copy without leaking memory and dangling pointer in C++在 C++ 中创建一个不泄漏内存和悬空指针的浅拷贝
【发布时间】:2018-02-04 21:56:20
【问题描述】:

还是不行,我得做一个深拷贝。假设我有一个对象A,我想将A 的浅拷贝复制到B。如果我删除A,并且A 销毁所有成员,那么B 将有悬空指针。如果A 没有销毁它的成员,那么B 的指针仍然是好的。但是,如果我删除B,那么当B 被销毁时,它的成员不会被销毁,所以我会泄漏内存。有没有办法让一个对象知道它何时拥有对内存的唯一引用并删除它?或者这是不可能的,我必须使用深拷贝。

【问题讨论】:

标签: c++ memory-leaks delete-operator shallow-copy


【解决方案1】:

有没有办法让一个对象知道它何时拥有唯一的引用 记忆,然后删除?

是的,它叫std::shared_ptr

【讨论】:

  • 如果我使用 c++98 有没有办法做到这一点?
  • @Blubber 对所有权和生命周期做出设计决策;这不是一个编码问题,而是一个设计问题——对象应该存在多长时间以及谁对它们负责。 std::shared_ptr 是对 “我不知道” 的简单回答,但问题通常可以通过设计解决。
  • @RichardCritten:没错。根据我的经验,std::shared_ptr 很少真正实现健壮设计,尤其是在 std::unique_ptr 出现之后。
猜你喜欢
  • 2019-06-18
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 2013-10-31
  • 2015-12-15
  • 2014-08-25
  • 2020-07-23
相关资源
最近更新 更多