나는 다음과 같은 코드가 있습니다동적 데이터를 삭제할 필요가 없습니까?
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;
}
을 그리고 내 질문은 : 메인 함수의 반환하기 전에 삭제 할 필요가없는 이유는 무엇입니까? 내 이해에 따르면이 코드는 메모리 누수가 발생합니다. 제가 잘못 생각합니까?
[업데이트] valgrind를 사용하여 다음 코드를 검사하면 더 혼란 스럽습니다. 메모리 누수가 있다고합니다.
이 유형은 멤버 함수의 주소를 저장하므로 적어도 누구 에게라도 잘못했다고 말하고 싶습니다. – OMGtechy
그것은 당신이 정리하지 않은 것만 큼 많은 누출이 아닙니다. 참조를 실제로 잊어 버리면 적절한 누출이됩니다. 만약 당신이'a = nullptr; '라고했다면. 누출은 언제나 좋지 않은 반면에, 끝내서 unreclaimed 한 것을 떠나는 것은 때때로 이루어집니다. –