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

时间:2015-01-23 02:26:50

标签: 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;
}

使用上述逻辑,预计会执行以下步骤:

  1. ~child()被称为=>孩子的共同= 2。
  2. ~parent()被称为=> parent's common = 1?
  3. 在第2步中,“这是常见的=孩子的共同点”吗?

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

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

1 个答案:

答案 0 :(得分:5)

此代码:

class child: public parent {
    ...
    int common;
}

在班级int中定义名为common不同 child。由于基类具有名为common的任何符号,因此该基本符号只是隐藏

如果基本符号parent::commonintstd::string或函数名称或枚举,则无关紧要。这是隐藏的。

  

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

没有。在parent函数中,它是父级common

  

因此,步骤2的分配可以将1写入未知地址&意外崩溃,我是对的吗?

没有。一个作业分配给parent::common。另一个分配给child::common。它们是两个不同的变量。