请考虑以下代码:
class a
{
int a1;
public:
a()
{
printf("foo1\n");
}
};
class b : public a
{
int a2;
public:
b()
{
printf("foo2\n");
}
};
int main (int argc, const char * argv[])
{
b *instance = new a();
return 0;
}
它会报错:无法用类型为“a*”的右值初始化类型为“b*”的变量。当我写成以下格式时就没问题:
a *instance = new b();
输出结果如下:
foo1
foo2
请问有人可以解释一下原因吗?非常感激 :)
另外,如果我写 ,会发生什么?
instance->~a();
return 0;
上面没有任何额外的操作。这是因为构造函数只能被调用一次吗?
instance->~a();
调用的是析构函数,而不是构造函数。通常情况下,您不需要手动执行此操作。对于使用new
分配的对象,请使用delete
运算符,例如delete instance;
。 - André Caron