use*_*641 2 c++ oop inheritance destructor class
using namespace std;
class A {};
class B {};
class C : public A {
public:
C(){ b = new B();}
B* b;
~C(){
printf("in destructor\n");
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 1\n");
doSomething(*a);
printf("Line 2\n");
delete(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出为:
Line 1
in destructor
Line 2
Run Code Online (Sandbox Code Playgroud)
尝试删除delete(a)并获得相同的结果。
为什么我看不到析构函数两次调用?我希望可以在doSomething函数末尾和delete调用时调用它。
为什么doSomething函数调用析构函数?为什么不delete(a)引起错误?
您缺少中的virtual析构函数A,因此未定义行为。定义行为的默认值。
class A {
public:
virtual ~A() = default;
};
Run Code Online (Sandbox Code Playgroud)