我有以下代码:
class A {
public:
virtual void f() {
cout << "1" << endl;
}
};
class B : public A {
public:
void f {
cout << "2" << endl;
}
};
int main() {
A* a = new B();
a->f();
return 0;
}
我的问题是:为什么在主函数返回之前没有必要删除? 根据我的理解,这段代码会导致内存泄漏,我错了吗?
[UPDATE] 我使用valgrind检查了以下代码,它让我更加困惑。它说存在内存泄漏。
答案 0 :(得分:1)
确实存在内存泄漏。它持续从main
返回到程序的退出,在这种情况下非常非常短。
答案 1 :(得分:0)
“根据我的理解,此代码会导致内存泄漏,我错了吗?”
不,你应该有delete
。虽然内存泄漏通常无关紧要,但由于操作系统将在return 0;
之后回收从进程分配的所有内存。