이제 부모 개체가 삭제되면 Qt가 모든 자식 개체의 메모리를 해제한다는 것을 알게되었습니다. 또한, 일반적으로 스택 상에 생성 된 객체 (즉, 포인터가 아닌 객체)에 대한 메모리 관리는 신경 쓸 필요가 없다. addressbook.h
addressbook.cpp
여기 finddialog.h
Qt의 메모리 관리 : AddressBook 튜토리얼
이 dialog
개인 회원입니다 :
AddressBook::AddressBook(QWidget *parent) : QWidget(parent)
{
dialog = new FindDialog;
}
완전한 소스로 볼 수 있습니다 : 나는 "AddressBook" tutorial 아주 좋은했을 때
지금, 나는 부분 (5)이 발견 AddressBook
이고, FindDialog
에 대한 포인터입니다. FindDialog
은 QDialog
을 상속하지만 this
은 없습니다. - 포인터가 생성자로 전달됩니다 (위 참조). 에도 불구하고,
가 [의 FindDialog의] 생성자는 부모는 QWidget을 허용하도록 정의 : 명시 적 소멸자this
은 의도적 인 것 같다 통과하지, 또한 ... 더delete dialog
울어가없는,을 존재하지 않는다 대화 상자가 별도의 창으로 열립니다.
메모리 누수가 발생하지 않습니까? 아니면 자동으로 dialog
을 삭제하고 메모리를 비울 수있는 다른 메커니즘이 있습니까?
미리 도움을 청하십시오!
업데이트 :이 문제는 qt-project.org forums에 게시되었으며 곧 수정 될 예정입니다.
니스.'Q_OBJECT' 매크로를 사용하여 실제로 마술이 일어나지 않는 한, 메모리 누수가 거의 확실합니다. [valgrind] (http://valgrind.org/)를 사용하여 확실하게 확인할 수 있습니다. 그러나'AddressBook'은 애플리케이션의 수명을 연장하기 때문에 무의미합니다. 그래도 튜토리얼에서, 그것은 당신과 같은 우려를 제기하는 것을 피하기 위해 해방되어야합니다. –
@MattPhillips 그러나 응용 프로그램의 수명 만 지속되는'AddressBook'은'dialog'에 영향을 미치지 않습니까? 스택 상에 생성되었지만 여기서는 그렇지 않다면 ... –
요점은,'AddressBook' 인스턴스는 애플리케이션이 종료 될 때 파괴됩니다.이 시점에서' 대화 상자 '가 해제됩니다. 따라서 메모리 누수는 피할 수 있지만 스타일이 좋지 않고 조정할 수없는 방식입니다. –