我创建了一个子级,B,为此,我会打电话给A.创建一个'新'实例解决了析构函数崩溃?
我写了这个工作代码的类,所以我要推广的实际代码:
class A
{
public:
A()
{
important_variable = new Type();
...
};
~A (void) { delete(important_variable); }; // Default destructor
// more methods
protected:
Type *important_variable;
};
class B : public A
{
public:
B() : A() { important_variable = another_var; }
~B() {};
Type *another_var;
};
有了这个B代码导致我的程序崩溃了'未处理的异常'。
现在,当我为B类代码改成这样:
class B : public A
{
public:
B() : A() { another_var = new Type(); important_variable = another_var; }
~B() {};
Type *another_var;
};
异常消失。
我认为我原来的B代码导致我的程序崩溃,因为A试图删除一个仍然被另一个变量指向的变量。这个推理是否正确?为什么B的新代码会导致我的程序正常工作?
你的推理可能是正确的(不能说没有看到更多的代码)。第二个代码的作用是因为您为每个实例创建了一个新对象,所以每次删除一个对象时,它都不会踩到其他对象的脚趾。但是你的代码有内存泄漏。你不能只重新分配一个指针而不做一些关于它指向的对象的东西。 – Dave