using namespace std;
class A {};
class B {};
class C : public A {
public:
C(){ b = new B();}
B* b;
~C(){
printf("in destructorn");
delete b;
}
};
void doSomething(A&aref)
{
C c = (C &) aref;
c.b = new B();
int i;
}
int main()
{
A * a;
a = new C();
printf("Line 1n");
doSomething(*a);
printf("Line 2n");
delete(a);
return 0;
}
输出是:
Line 1
in destructor
Line 2
尝试删除delete(a)
并获得相同的结果。
为什么我看不到两次被命令的命令器?我希望在doSomething
函数的末尾和delete
调用。
为什么doSomething
函数称呼驱动器?为什么delete(a)
不会导致错误?
您缺少 A
中的 virtual
destructor,因此未定义的行为。默认一个用于定义的行为。
class A {
public:
virtual ~A() = default;
};