2009-09-26 3 views
18

같이 쓰여졌습니다 here Qt는 8 개의 스마트 포인터 클래스를 가지고 있습니다. 당신이 필요로하는 것이 전부 인 것처럼 보입니다. 그러나 이러한 스마트 포인터 중 하나를 사용하려면 클래스가 QObject에서 파생되어야하며 항상 편리하지는 않습니다. 임의의 클래스에서 작동하는 스마트 포인터의 다른 구현이 Qt에 있습니까?Qt의 스마트 포인터

+8

사실, 대부분의 포인터에 대해서는 QObject에서 파생 될 필요가 없습니다. 저는 생각하지 않습니다. 클래스 중 일부에는 클래스가 처리해야하거나 다른 Q 클래스에서 파생되어야 할 다른 것이 있습니다. AFAIK, QPointer만이 QObject에서 파생 된 클래스를 필요로합니다. 즉, 프로젝트에서 Qt를 사용할 수 있어야합니다. –

답변

18

많은 Qt 클래스는 QObject에서 파생되었으며 내장 된 스마트 포인터 클래스 중 일부는 QObject (또는 QSharedData)와 관련되어 있지만 QSharedPointerQScopedPointer 템플릿은 포인터를 허용합니다. 그 너머

, 당신은 Boost 일부 smart pointer templates을 확인할 수있는 것들 :

  • scoped_ptr을 - 단일 객체의 간단한 단독 소유권을. 복사 불가.
  • scoped_array - 배열의 단순한 단독 소유권. 복사 불가.
  • shared_ptr - 개체 소유권이 여러 포인터에서 공유됩니다.
  • shared_array - 배열 소유권이 여러 포인터에서 공유됩니다.
  • weak_ptr - shared_ptr이 소유 한 객체를 소유하지 않은 관찰자.
  • intrusive_ptr - 참조 카운트가 포함 된 개체의 공유 소유권.
+0

이것은 옳다. STL에는 auto_ptr도 있습니다. 질문은 QT에 관한 것입니다. – alexkr

+1

Qt에서 QObject를 기반으로하는 모든 것을 Qt를 기반으로합니다. 그래서 바깥에서 작동하는 무언가를 원한다면, 한 곳을 올려보세요 :) –

+8

와우, 나는 여전히 C++ (예 : C++, 1990 년경)를 사용합니다. 그게,이 못 생기고 읽을 수없는 똑똑한 포인터가 나를 아프게합니다. – Lothar

관련 문제