class parent {
virtual ~parent();
private:
int father_private;
int common;
}
~parent() {
common = 1;
}
class child: public parent {
~child();
private:
int common;
}
~child() {
common = 2;
}
根据上述逻辑,可以预期执行以下步骤:
〜child()被称为=> child's common = 2。
〜parent()被称为=>父母的共同点= 1?
在步骤2中,“这个共同点=孩子的共同点”吗?
我发现地址不相同,因此可能意味着编译器不使用名称而是使用类中的offeset。因此,步骤2的分配可能会将1写入未知地址,并导致意外崩溃,对吗?
我发现Andorid本机流具有一些类,这些类的构造函数或析构函数可以访问其私有数据成员。作为上述问题,这使得继承极其困难。您如何解决这个问题?
最佳答案
这段代码:
class child: public parent {
...
int common;
}
在类
int
中定义一个名为common
的独特child
。因为基类有任何名为common
的符号,所以该基符号被简单地隐藏了。基本符号
parent::common
是int
还是std::string
或函数名称还是枚举都没有关系。它是隐藏的。在第2步中,“这个共同点=孩子的共同点”吗?
否。在
parent
函数中,它是父级的common
。因此,步骤2的分配可能会将1写入一个未知地址,并导致意外崩溃,对吗?
否。一项作业分配给
parent::common
。另一个分配给child::common
。它们是两个不同的变量。关于c++ - 如何避免父类析构函数设置派生类的数据成员,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28102099/