2009-09-26 9 views
18

Как было написано here Qt до сих пор имеет 8 специализированных классов умных указателей. Похоже, это все, что вам когда-либо понадобится. Однако, чтобы использовать любой из этих умных указателей, ваш класс должен быть получен из QObject, что не всегда удобно. Существуют ли другие реализации интеллектуальных указателей в Qt, которые работают с произвольными классами?Умные указатели в Qt

+8

На самом деле, для большинства этих указателей вам не нужно выводить из QObject, я не думаю. Есть некоторые другие вещи, которые ваши классы должны будут обрабатывать или извлекать из некоторых других Q-классов для некоторых из них. AFAIK, только QPointer требует, чтобы ваш класс был получен из QObject. Это, как было сказано, они требуют возможности использовать Qt в вашем проекте. –

ответ

18

Многие классы Qt являются производными от QObject, и в то время как некоторые из встроенных в смарт-классов указателей связаны с QObject (или QSharedData), то QSharedPointer и QScopedPointer шаблоны появляются, чтобы указатели на что-нибудь.

Кроме того, вы найдете некоторые smart pointer templates в Boost:

  • scoped_ptr - Простое единоличное владение отдельных объектов. Noncopyable.
  • scoped_array - Простое владение массивами. Noncopyable.
  • shared_ptr - Владение объектом совместно используется несколькими указателями.
  • shared_array - Владелец массива делится между несколькими указателями.
  • weak_ptr - Непознающие наблюдатели объекта, принадлежащего shared_ptr.
  • intrusive_ptr - Совместное владение объектами со встроенным подсчетом ссылок.
+0

Это правильно. STL также имеет auto_ptr. Вопрос в QT. – alexkr

+1

Практически все в Qt с использованием QObject в качестве базы, поэтому, если вы хотите что-то, что работает за пределами этого, Boost одно место для поиска :) –

+8

Вау, я все еще использую C++, как «C с классами» (это C++ около 1990 года). Это работает, все эти уродливые нечитаемые умные указатели не понимают меня. – Lothar

Смежные вопросы