想象一下,我有一个包含指针的基类和一个删除该指针的析构函数。
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
,但我真的很想学习如何管理此原始指针。
类似这样的东西:
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的内容。