Wie es geschrieben wurde here Qt hat bisher 8 spezielle Smart-Pointer-Klassen. Es sieht so aus als wäre es alles was du jemals brauchen wirst. Um einen dieser intelligenten Zeiger zu verwenden, muss Ihre Klasse jedoch von QObject abgeleitet werden, was nicht immer praktisch ist. Gibt es andere Implementierungen von Smartpointern in Qt, die mit beliebigen Klassen arbeiten?Smart Pointer in Qt
Antwort
Viele Qt-Klassen werden von QObject abgeleitet, und während einige der in Smart-Pointer-Klassen gebaut werden QObject bezogen (oder QSharedData), die QSharedPointer und QScopedPointer Vorlagen erscheinen Zeiger auf irgendetwas zu ermöglichen. - Einfache Alleineigentum einzelner Objekte
- scoped_ptr:
Darüber hinaus werden Sie einige smart pointer templates in Boost finden. Nicht kopierbar.
- scoped_array - Einfache alleinige Besitz von Arrays. Nicht kopierbar.
- shared_ptr - Objektbesitz unter mehreren Zeigern geteilt.
- shared_array - Array Besitz unter mehreren Zeigern geteilt.
- weak_ptr - Nichtbesitzende Beobachter eines Objekts, das shared_ptr gehört.
- intrusive_ptr - Gemeinsamer Besitz von Objekten mit einer eingebetteten Referenzzählung.
Das ist richtig. STL hat auch auto_ptr. Die Frage betrifft QT. – alexkr
Praktisch alles in Qt mit QObject als Basis, also wenn Sie etwas wollen, das außerhalb davon funktioniert, Boost ein Ort zu gehen :) –
Wow, ich benutze immer noch C++ wie "C mit Klassen" (das ist C++ um 1990). Das funktioniert, all diese hässlichen, unlesbaren, intelligenten Zeigern machen mich krank. – Lothar
Eigentlich, für die meisten dieser Zeiger müssen Sie nicht von QObject ableiten, denke ich nicht. Es gibt einige andere Dinge, die Ihre Klassen für einige von ihnen behandeln oder von einigen anderen Q-Klassen ableiten müssten. AFAIK, nur QPointer benötigt, dass Ihre Klasse von QObject abgeleitet wird. Nachdem dies gesagt wurde, erfordern sie die Fähigkeit, Qt in Ihrem Projekt zu verwenden. –