【问题标题】:Memory management with pointers created using "new" in C++在 C++ 中使用“new”创建的指针进行内存管理
【发布时间】:2014-04-24 08:28:56
【问题描述】:

我有一个基类,其中在标头中声明了 2 个指针。然后在基类的方法中使用“new”关键字初始化指针,并在基类的析构函数中使用“delete”删除。

我还有一个继承自基类的派生类。我也在那里声明了一个指针。根据布尔值,此指针被分配给基类的任一指针。但是,这会在调用基类的析构函数时导致段错误。

我的理解是,发生这种情况是因为派生类会在调用基类的析构函数之前自动删除指针。当在基类中调用“delete”时,这块内存区域已经被释放,导致段错误。

这样做的正确方法是什么?我的目标是在派生类中有一个指针,它可以灵活地等于基类中初始化的指针之一。

【问题讨论】:

  • 展示代码(即使只是伪代码)比用散文描述要好。
  • 心理调试器说:“你deleteing 派生和基类中的动态数据”

标签: c++ pointers memory-management


【解决方案1】:

要么不删除派生类中的指针,要么使用标准智能指针std::shared_ptr

【讨论】:

    【解决方案2】:

    您的基类可能应该有一个虚拟析构函数,然后您应该覆盖派生类中的析构函数,以确保所有内容都按您期望的顺序被删除。

    但是如果不看代码就很难知道发生了什么,所以这只是一个想法......

    【讨论】:

      猜你喜欢
      • 2010-12-28
      • 1970-01-01
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      相关资源
      最近更新 更多