如何避免父类析构函数设置派生类的数据成员

cha*_* jc 0 c++

class parent {
    virtual ~parent();
private:
    int father_private;
    int common;
}

~parent() {
    common = 1;
}

class child: public parent {
    ~child();
private:
    int common;
}

~child() {
    common = 2;
}
Run Code Online (Sandbox Code Playgroud)

根据上述逻辑,预计会执行以下步骤:

  1. 叫~child()=> child's common = 2.
  2. 〜parent()被称为=> parent的common = 1?

在第2步中,"这是常见的=孩子的共同点"吗?

我发现地址不一样所以它可能意味着编译器不会取名,而是在类中使用offeset.因此,步骤2的分配可能会将1写入未知地址并导致意外崩溃,我是对的吗?

我发现Andorid本机流有一些类,其构造函数或析构函数可以访问其私有数据成员.它使得继承性成为上述问题的极其困难.你是如何解决这个问题的?

Dre*_*ann 5

这段代码:

class child: public parent {
    ...
    int common;
}
Run Code Online (Sandbox Code Playgroud)

在类中定义一个不同的 int命名.因为基类具有任何命名的符号,所以简单地隐藏该基本符号.commonchildcommon

如果基本符号不要紧,parent::commonintstd::string或函数名或枚举.它是隐藏的.

在第2步中,"这是常见的=孩子的共同点吗?"

不.在parent功能中,它是父母的common.

因此,步骤2的分配可能会将1写入未知地址并导致意外崩溃,我是对的?

不,一个任务分配给parent::common.另一个分配给child::common.它们是两个不同的变量.