请参阅以下代码:
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中没有? 非常感谢
答案 0 :(得分:2)
发生了第1种情况,因为您将析构函数声明为protected
,因此当您在本地声明对象时,您的程序无法访问销毁该对象所需的析构函数。
如果您声明了派生对象,那么派生对象就可以访问基类的析构函数:
struct B : public A
{}
然后在main
B b;
而不是A a;
,然后它会编译而不会出错。
案例2为most vexing parse:
A b();
是一个函数声明,它没有按照您的想法创建A
的实例