2009-09-26 14 views
18

Jak to zostało napisane here Qt do tej pory ma 8 specjalnych klas inteligentnych wskaźników. Wygląda na to, że wszystko, czego będziesz potrzebować. Jednakże, aby użyć dowolnego z tych inteligentnych wskaźników, twoja klasa musi pochodzić z QObject, co nie zawsze jest wygodne. Czy istnieją inne implementacje inteligentnych wskaźników w Qt, które działają z dowolnymi klasami?Inteligentne wskaźniki w Qt

+8

W rzeczywistości, dla większości z tych wskaźników, które nie muszą pochodzić z QObject, nie sądzę. Jest kilka innych rzeczy, które twoje klasy będą musiały obsłużyć lub wyprowadzić z niektórych innych klas Q, dla niektórych z nich. AFAIK, tylko QPointer potrzebuje, aby twoja klasa pochodziła z QObject. To powiedziawszy, wymagają one użycia Qt w twoim projekcie. –

Odpowiedz

18

Wiele klas Qt pochodzą z QObject, i choć niektóre z wbudowanych w klasach inteligentnych wskaźnik związane są QObject (lub QSharedData), przy czym QSharedPointer i QScopedPointer szablony pojawiają się w celu umożliwienia wskaźniki do niczego.

Poza tym, znajdziesz niektóre smart pointer templates w Boost:

  • scoped_ptr - Proste wyłączną własność pojedynczych obiektów. Nieoprawione.
  • scoped_array - Proste wyłączne prawo własności do tablic. Nieoprawione.
  • shared_ptr - Własność obiektu jest wspólna dla wielu wskaźników.
  • shared_array - Własność macierzy współużytkowana wśród wielu wskaźników.
  • weak_ptr - Nie posiadających uprawnień obserwatorów obiektu należącego do shared_ptr.
  • intrusive_ptr - Współwłasność własna obiektów z osadzoną liczbą odwołań.
+0

To prawda. STL ma również auto_ptr. Pytanie dotyczy QT. – alexkr

+1

Praktycznie wszystko w Qt przy użyciu QObject jako bazy, więc jeśli chcesz coś, co działa poza tym, Zwiększ jedno miejsce do szukania :) –

+8

Wow, nadal używam C++ jak "C z klasami" (to C++ około 1990). To działa, wszystkie te brzydkie, nieczytelne, inteligentne wskaźniki sprawiają, że jestem chory. – Lothar

Powiązane problemy