我对大多数OO理论有了深刻的理解,但让我困惑的一件事是虚拟析构函数.
我认为无论什么以及链中的每个对象,析构函数总是会被调用.
你什么时候打算让它们成为虚拟的?为什么?
我在玩代码
struct A {
char a[20000];
A() { a[0] = 'A'; }
~A() {}
};
struct B : A {
char a[20000];
B() { a[0] = 'B'; }
~B() {}
};
int main() {
A *pA = new A;
A *pB = new B;
delete pA;
delete pB;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有人写道(为什么我们需要一个带有动态内存的虚拟析构函数?)它应该引起内存泄漏,但事实并非如此。我使用g ++,然后使用valgrind --leak-check = full --show-leak-kinds = all --track-origins = yes --verbose --log-file = valgrind-out.txt并获取
HEAP SUMMARY:
in use at exit: 0 bytes …Run Code Online (Sandbox Code Playgroud)