c++ - 为什么我们不能从派生类中调用 protected 析构函数?

标签 c++ oop inheritance c++11 destructor

我知道私有(private)(当然还有公共(public))析构函数的用途。

我也知道在派生类中使用 protected 析构函数:

Use a protected destructor to prevent the destruction of a derived object via a base-class pointer

但是我试过运行下面的代码,它不会编译:

struct A{
    int i;
    A() { i = 0;}
    protected: ~A(){}
};

struct B: public A{
    A* a;
    B(){ a = new A();}
    void f(){ delete a; }
};


int main()
{
   B b= B();
   b.f();
   return 0;
}

我得到:

void B::f()':
main.cpp:9:16: error: 'A::~A()' is protected

我错过了什么?

如果我从 f() 内部调用 A 中的 protected 方法,它将起作用。那么为什么称呼 d'tor 不同呢?

最佳答案

protected并不意味着你的 B可以访问任何的成员A ;它只意味着它可以访问它自己的那些成员 A基地...和其他一些成员BA基地!

这与 private 形成对比, 其中一些类型为 A 的对象始终可以调用 private 另一个 类型为 A 的对象的成员.

关于c++ - 为什么我们不能从派生类中调用 protected 析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19468900/

相关文章:

oop - 软件开发模式、方法论(敏捷、dsdm 等)和范例(特别是面向对象)之间有什么区别?

java - Objective-C 方法重载

java - 如何限制子类修改抽象类中方法的范围?

c++ - 多态显式模板实例化

c++ - 无法在 C++ 项目中链接 crypt

c++ - 英特尔 C++ 编译器本身的通用结构

c++ - 使用 C++ 中定义的#if 来选择 Qt 套件

javascript - 嵌套类的范围问题

c++ - 从派生类构造函数调用基类构造函数

c++ - 位掩码 : Set different states of an object via set method