2010-07-16 5 views
9

Qt 객체의 수명은 어떻게됩니까?Qt 객체의 수명

예를 들면 : 소켓은

QTcpSocket *socket=new QTcpSocket(); 

을 파괴됩니다 때? 내가

를 사용해야와 어떤 차이가 있습니까 : 나는 이것에 대해 깊은 infromation를 찾을 수 없습니다

QTcpSocket socket; 

는 어떤 코멘트 나 링크를 환영합니다.

답변

11

Qt는 메모리를 관리하기 위해 부모 - 자식 관계를 사용합니다. 부모 개체를 만들 때 QTcpSocket 개체에 부모 개체를 제공하면 부모 개체가 개체를 정리합니다. 예를 들어, 부모는 소켓을 사용하는 GUI 창일 수 있습니다. 윈도우가 죽으면 (즉, 닫혀있을 때), 소켓은 죽는다.

부모가 없으면 할 수 있지만 실제로는 delete 수작업으로 처리해야합니다.

개인적으로는 관용적 인 Qt를 고수하고 모든 개체를 부모 - 자식 트리에 연결하는 것을 권장합니다.

9

new으로 할당 된 객체는 delete과 함께 릴리스되어야합니다.

그러나 Qt를 사용하면 대부분의 객체에 부모가있을 수 있습니다. 부모는 생성자에 대한 인수로 지정합니다. 상위가 h 제되면 하위 오브젝트는 자동으로 h 제됩니다.

+0

삭제하려고하면 런타임 오류가 발생합니다 (QHostAddress에서 개인 회원에 액세스하려는 시도). – metdos

+0

개인 회원 액세스는 컴파일 중에 만 런타임에 확인되지 않습니다. 어쩌면 충돌일까요? 그런 다음 개체가 두 번 삭제됩니다. –

2

소켓 개체를 소유하고있는 QObject가 없기 때문에 어떤 이유로 부모를 전달하지 않으려면 QSharedPointer를 사용하여 수명을 관리 할 수도 있습니다.