受保护的破坏者和对象初始化

Protected destructor and object initialisation

本文关键字:对象 初始化 破坏者 受保护      更新时间:2023-10-16

请参阅以下代码:

struct A
{
protected:
    ~A() {};
};
void main()
{
    //case 1:
    A a;
    //error C2248: 'A::~A': cannot access protected member declared in class 'A'
    //case 2:
    A b();//works fine
}

为什么我在案例1中会出现错误,而在案例2中却没有错误?非常感谢

案例1之所以发生,是因为您将驱动器声明为 protected,因此当您本地声明对象时,您的程序无法访问销毁对象所需的驱动器。

如果您声明了一个派生的对象,则派生对象将可以访问基类的破坏者:

struct B : public A
{}

然后,在您的main中,您有B b;而不是A a;,然后将其编译而不会出错。

案例2是最烦人的解析:

A b();

是一个函数声明,它不是在做您认为创建A

实例的想法