【发布时间】:2015-12-22 19:42:38
【问题描述】:
我有一些类Daughter1 和Daughter2 继承自Mother:
class Mother
{
public:
Mother(); // Empty constructor.
virtual ~Mother(); // Delete common daughter's stuff.
protected:
// Common stuff of each daughter.
};
每个子类的通用东西删除方法都是一样的,所以妈妈负责。但是它们的初始化是不一样的,所以它们在各自女儿的构造函数中:
class Daughter1 : public Mother
{
public:
Daughter1(); // Initialize mother's stuff
~Daughter1();
};
class Daughter2 : public Mother
{
public:
Daughter2(); // Initialize mother's stuff in a different way than Daughter1
~Daughter2();
};
问题是:有时,子构造函数可能无法加载其内容并引发异常。当我这样声明女儿时:
Daughter1 daughter;
并且构造函数抛出异常,它调用母亲的析构函数,它试图在没有初始化的情况下删除它的东西,这不可避免地导致分段错误。
避免这种麻烦的最好方法是什么?
我的大部分东西都是由指针组成的,所以我知道我可以在母构造函数中简单地将它们初始化为 nullptr 并在尝试在析构函数中删除之前检查它们,但它只适用于指针,我正在寻找寻求全球解决方案。
【问题讨论】:
-
如果不了解
Mother::Mother的作用,就很难提出建设性的建议。 -
@RSahu 母构造函数为空。我添加了精度。
标签: c++ c++11 exception constructor destructor