Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Различия QSharedDataPointer и tr1::shared_ptr 
:(
    Опции темы
auric
Дата 10.8.2008, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 9.10.2006
Где: Киев, Украина

Репутация: нет
Всего: нет



Не совсем понимаю,чем отличаются реализации этих классов. В версии Qt класс, который будет использоваться с их интеллектуальным указателем, должен наследоваться от QSharedData (я так понял,что там подсчитываются ссылки). Тогда, возможно, эффективнее использовать shared_ptr из Boost. Кто-нить сталкивался, может объяснить их отличия, преимущества?
PM MAIL WWW ICQ Jabber   Вверх
copermine
Дата 10.8.2008, 03:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 27.9.2007

Репутация: нет
Всего: нет



Это одно и тоже вот если ты юзаеш Qt зачем тебе буст?
PM   Вверх
auric
Дата 10.8.2008, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 9.10.2006
Где: Киев, Украина

Репутация: нет
Всего: нет



я считаю,что нужно искать всегда более подходящие средства. И вообще интересно знать преимущества первой и второй реализаций.
PM MAIL WWW ICQ Jabber   Вверх
Любитель
Дата 11.8.2008, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Это разные вещи. shared_ptr - ready to use, но это обёртка над имеющимся классом. А с QSharedData и пр. реализуется класс, инкапуслирующий подсчёт ссылок и вдобавок COW.


--------------------
PM MAIL ICQ Skype   Вверх
copermine
Дата 12.8.2008, 04:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 27.9.2007

Репутация: нет
Всего: нет



млин ну абсолютно тоже самое, что я сделаю в стиле:
Код

SHARED(Class)\
class SharedData##Class : public Class, public QSharedData {};\
typedef QSharedDataPointer<SharedData##Class> Shared##Class;

над имеющимся классом! главное что можно варьировать и избежать использование буста...
еще можно раскопать QAtomicPointer и посмотреть сколько там разных политик...
+1 пишешь на Qt имеется в арсенале пользуй.
PM   Вверх
Любитель
Дата 12.8.2008, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



copermine, покажи мне готовый COW с бустом.


--------------------
PM MAIL ICQ Skype   Вверх
copermine
Дата 12.8.2008, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 27.9.2007

Репутация: нет
Всего: нет



http://en.wikibooks.org/wiki/More_C%2B%2B_...s/Copy-on-write

QSharedData не реализует cow, его реализует QSharedDataPointer, в противовес ему есть QExplicitlySharedDataPointer 

я не понял ты за или против Qt ;)
PM   Вверх
Любитель
Дата 12.8.2008, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Я особо не за и не против. Я просто говорю, что это разные вещи smile Разные подходы.


--------------------
PM MAIL ICQ Skype   Вверх
SABROG
Дата 12.8.2008, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Я правильно понимаю QSharedDataPointer реализует подсчет ссылок, плюс Copy-on-Write (implicit sharing), в то время как QExplicitlySharedDataPointer использует один и тот же объект даже, если идет его изминение. По сути мало чем отличается от обычного указателя в С++ кроме того, что знает реального владельца объекта.

Применение QSharedDataPointer может быть полезным, когда создается большое количество экземпляров одного класса, где каждый объект может быть потенциально изминен, но не обязательно.

Применение QExplicitlySharedDataPointer полезно, когда надо сделать большое количество копий указателя. При этом каждая копия увеличивает счетчик и объект разрушается только в том случае, если это последний указатель. Например в поле UserData каждой ячейки таблицы можно поставить такой указатель, при выборе любой ячейки мы можем получать какую-то информацию. При удалении ячеек будут уничтожаться указатели на объект, но при этом сам объект не будет уничтожен пока не удалится последняя ячейка. Это как auto_ptr или есть различия ?


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
copermine
Дата 13.8.2008, 06:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 27.9.2007

Репутация: нет
Всего: нет



типа того, единственный не гуд автоптр и д.р. из стд либ это разная реализация этих либ разработчиками компиляторов, что не есть гуд.
к примеру список автоптров может собраться на одном компиляторе и запороть на другом, помню лохонулся с вложенными мапами когда на ггц все собралось, а на мсвс послало очень далеко.
PM   Вверх
SABROG
Дата 13.8.2008, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(copermine @ 13.8.2008,  06:23)
типа того, единственный не гуд автоптр и д.р. из стд либ это разная реализация этих либ разработчиками компиляторов, что не есть гуд.
к примеру список автоптров может собраться на одном компиляторе и запороть на другом, помню лохонулся с вложенными мапами когда на ггц все собралось, а на мсвс послало очень далеко.

Да, есть такое дело при использовании стандартных контейнеров вместе с auto_ptr. Один компилер может собрать такую программу, но ее работа будет не предсказуема, а другой выдаст ворнинг.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Любитель
Дата 13.8.2008, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Цитата(SABROG @  12.8.2008,  17:43 Найти цитируемый пост)
По сути мало чем отличается от обычного указателя в С++ кроме того, что знает реального владельца объекта.

Нет. У него есть метод detach - для создания копии объекта. Только в отличии от QSharedDataPointer этот detach можно вызвать только явно (о чём и говорить название класса) smile

Цитата(copermine @  13.8.2008,  06:23 Найти цитируемый пост)
к примеру список автоптров может собраться на одном компиляторе и запороть на другом

std::auto_ptr по стандарту не реализует конструктора копирования и оператора присваивания. Его использование с контейнерами по стандарту невозможно.


--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0799 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.