2012-02-03 3 views

답변

3

짧은 대답은 다음과 같습니다

QObjects 개체 나무에 자신을 구성 할 수 있습니다. 다른 객체를 부모로 사용하여 QObject를 만들면 부모의 children() 목록에 추가되고 부모가되면 QObject가 삭제됩니다.

Qt는 프레임 워크 내에서 개체 계층 구조와 소유권에 대한 좋은 문서를 가지고 있습니다.

  1. QObject를 트리 구조
  2. 관리되는 포인터 클래스

그리고이 정말하지 않는 : 당신이 here

8

Neox's answer을 확장하기 위해 읽을 수 Qt는 객체 관리를위한 두 가지 방법이있다 명백해질 이유로 잘 섞는다.

QObject은 '무료'이거나 부모가있을 수 있습니다. QObject가 부모 집합을 가질 때 (QObject 생성자에 다른 QObject에 대한 포인터를 제공하거나 setParent()을 호출하여) 부모 QObject는 자식 QObject의 소유자가되며 자식 QObject의 소유자가 될 때 해당 자식이 파기되는지 확인합니다. 또한 자녀/부모 관계를 검사하는 데 사용할 수있는 몇 가지 방법이 있습니다.

동적으로 할당 된 개체를 관리하는 별도의 방법은 this paper이 매우 잘 설명하는 관리되는 포인터 클래스입니다. "동적으로 할당 된 객체에 QScopedPointer 클래스를 저장 포인터, 파괴에이를 삭제"

  • 을하고 명확하고 분명한 소유권과 수명이 객체를 필요로 할 때, 따라서 좋은 :하지만 요약합니다.
  • "QSharedPointer 클래스는 공유 포인터에 대한 강력한 참조를 보유하고 있으며 다른 QSharedPointer 객체가 참조하지 않는 한 그것이 범위를 벗어날 때 보유하고있는 포인터를 삭제합니다"따라서 소유권이 명확한 상처는 없지만 잃어 버리지 않고 메모리 누출이되지 않도록해야합니다. QWeakPointer은 소유권을 암시하지 않고 포인터를 공유하는 데 사용할 수 있습니다. 당신이 볼 수 있듯이

는 보호 포인터 클래스의 일부는 QObject를 트리를 사용할 수 있지만, 당신은 당신이 읽고 있는지 확인하고 그렇게하기 전에 설명서를 충분히 이해하거나 손상된 데이터 구조로 끝낼 수 있어야 .

+0

나 같은 초보자를위한 기초를 다루는 QT 학습을위한 책을 권할 수 있습니까? QT4 서적으로 C++ GUI 프로그래밍을하고 있지만 많은 도움을 제공하지는 않습니다! – user1162272

+0

책이 필요하지 않습니다. Qt 문서를 사용하십시오! 먼저 [튜토리얼] (http://developer.qt.nokia.com/doc/qt-4.8/tutorials.html)을 살펴보십시오. [클래스 참조] (http://developer.qt.nokia.com/doc/qt-4.8/classes.html)를 손에 들고 이해하지 못하는 것을 찾으십시오. CTRL + K를 누르고 "?"를 입력하여 Qt Creator를 사용하는 것이 좋습니다. Qt Creator 내에서 Qt 문서를 검색 할 수 있습니다. –