受保护的析构函数和对象初始化

时间:2016-12-09 11:20:24

标签: c++

请参阅以下代码:

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
}

为什么我在case-1中得到错误但在case-2中没有? 非常感谢

1 个答案:

答案 0 :(得分:2)

发生了第1种情况,因为您将析构函数声明为protected,因此当您在本地声明对象时,您的程序无法访问销毁该对象所需的析构函数。

如果您声明了派生对象,那么派生对象就可以访问基类的析构函数:

struct B : public A
{}

然后在main B b;而不是A a;,然后它会编译而不会出错。

案例2为most vexing parse

A b();

是一个函数声明,它没有按照您的想法创建A的实例