![]() |
|
![]() ![]() ![]() |
|
auric |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 9.10.2006 Где: Киев, Украина Репутация: нет Всего: нет |
Не совсем понимаю,чем отличаются реализации этих классов. В версии Qt класс, который будет использоваться с их интеллектуальным указателем, должен наследоваться от QSharedData (я так понял,что там подсчитываются ссылки). Тогда, возможно, эффективнее использовать shared_ptr из Boost. Кто-нить сталкивался, может объяснить их отличия, преимущества?
|
|||
|
||||
copermine |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 27.9.2007 Репутация: нет Всего: нет |
Это одно и тоже вот если ты юзаеш Qt зачем тебе буст?
|
|||
|
||||
auric |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 9.10.2006 Где: Киев, Украина Репутация: нет Всего: нет |
я считаю,что нужно искать всегда более подходящие средства. И вообще интересно знать преимущества первой и второй реализаций.
|
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Это разные вещи. shared_ptr - ready to use, но это обёртка над имеющимся классом. А с QSharedData и пр. реализуется класс, инкапуслирующий подсчёт ссылок и вдобавок COW.
|
|||
|
||||
copermine |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 27.9.2007 Репутация: нет Всего: нет |
млин ну абсолютно тоже самое, что я сделаю в стиле:
над имеющимся классом! главное что можно варьировать и избежать использование буста... еще можно раскопать QAtomicPointer и посмотреть сколько там разных политик... +1 пишешь на Qt имеется в арсенале пользуй. |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
copermine, покажи мне готовый COW с бустом.
|
|||
|
||||
copermine |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 27.9.2007 Репутация: нет Всего: нет |
http://en.wikibooks.org/wiki/More_C%2B%2B_...s/Copy-on-write
QSharedData не реализует cow, его реализует QSharedDataPointer, в противовес ему есть QExplicitlySharedDataPointer я не понял ты за или против Qt ;) |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Я особо не за и не против. Я просто говорю, что это разные вещи
![]() |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Я правильно понимаю QSharedDataPointer реализует подсчет ссылок, плюс Copy-on-Write (implicit sharing), в то время как QExplicitlySharedDataPointer использует один и тот же объект даже, если идет его изминение. По сути мало чем отличается от обычного указателя в С++ кроме того, что знает реального владельца объекта.
Применение QSharedDataPointer может быть полезным, когда создается большое количество экземпляров одного класса, где каждый объект может быть потенциально изминен, но не обязательно. Применение QExplicitlySharedDataPointer полезно, когда надо сделать большое количество копий указателя. При этом каждая копия увеличивает счетчик и объект разрушается только в том случае, если это последний указатель. Например в поле UserData каждой ячейки таблицы можно поставить такой указатель, при выборе любой ячейки мы можем получать какую-то информацию. При удалении ячеек будут уничтожаться указатели на объект, но при этом сам объект не будет уничтожен пока не удалится последняя ячейка. Это как auto_ptr или есть различия ? |
|||
|
||||
copermine |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 27.9.2007 Репутация: нет Всего: нет |
типа того, единственный не гуд автоптр и д.р. из стд либ это разная реализация этих либ разработчиками компиляторов, что не есть гуд.
к примеру список автоптров может собраться на одном компиляторе и запороть на другом, помню лохонулся с вложенными мапами когда на ггц все собралось, а на мсвс послало очень далеко. |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Да, есть такое дело при использовании стандартных контейнеров вместе с auto_ptr. Один компилер может собрать такую программу, но ее работа будет не предсказуема, а другой выдаст ворнинг. |
|||
|
||||
Любитель |
|
||||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Нет. У него есть метод detach - для создания копии объекта. Только в отличии от QSharedDataPointer этот detach можно вызвать только явно (о чём и говорить название класса) ![]()
std::auto_ptr по стандарту не реализует конструктора копирования и оператора присваивания. Его использование с контейнерами по стандарту невозможно. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |