如何删除派生类中基类对象的新对象?

问题描述 投票:0回答:1

想象一下,我有一个包含指针的基类和一个删除该指针的析构函数。

class Base {
private: 
  int *p;
public:
  Base(int data) : p(new int[data]) {}
  ~Base() {delete[] p;}
};

而且我有一个派生类,它也包含一个指针,并且有一个方法,在其中我制作了新的基类。

class Drived: public Base{
private:
  Base* _root;
public:
  Drived(int data) : Base(data), _root(new Base(data)) {}
  ~Drived() {delete _root;}
  void myMethod() {Base* bewBase = new Base(10);}
};

因此,如果执行此操作,则会发生内存泄漏,因为在方法myMethod中,我执行的是新操作,永远不会删除它。我想知道如何解决此问题。在此先感谢您对我的帮助。附注:此问题中的代码仅是示例,我无法正确编译。我只是想对我的问题表现出更好的理解。我也知道我可以为这类人员使用std::unique_ptr,但我真的很想学习如何管理此原始指针。

c++ memory destructor new-operator
1个回答
0
投票

类似这样的东西:

class Drived: public Base{
private:
  Base* _root;
  Base* bewBase;
public:
  Drived(int data) : _root(new Base(data)) {bewBase = nullptr;}
  ~Drived() {delete _root; if (bewBase != nullptr) delete bewBase;}
  void myMethod() {bewBase = new Base(10);}
};

或者您可以重用_root指针,并在新分配之前删除_root的内容。

© www.soinside.com 2019 - 2024. All rights reserved.