![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Добрый вечер,
Пишу умный указатель, столкнулся с такой вот проблемой. К примеру
(это далеко не идеальный код умного указателя, просто для примера написал) и...возьмем к примеру такой вот код в функции main
в этом случае наш счетчик ссылок будет иметь значение 2, что неверно, ведь mc_ptr1 и mc_ptr2 разные обьекты..несмотря на то что типы у них одинаковые. Следовательно подсчет ссылок организован нерверно. Первое решение пришедшее на ум это использовать std::map. Но мне оно не кажеться самым лучшим, почему то не покидает чувство что есть вариант получше. Попробовал посмотреть как реализован boost::shared_ptr, но boost как оказался не блещет обилием понятного кода и решил что лучше спросить у тех кто сталкивался, чем копаться в классах sp_counted_base, sp_counted_impl, sp_counted_base, weak_count итд... Заранее спасибо |
||||
|
|||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Это сообщение отредактировал(а) MAKCim - 24.11.2007, 00:02 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Есть несколько способ подсчитывать ссылки.
1. Построение связного списка из уиных указателей(т.о., когда список пуст, память удаляется). 2. Создание динамического счётчика. Вот простой пример для 2-го случая:
ps. Писал здесь, мог облажаться... Добавлено через 1 минуту и 27 секунд У MAKCimа код короче, а у меня более повторно используемый ![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
ааааа ![]() Почему то все время на static тянуло ![]() остальное уже сам додумаю. Всем спасибо |
||||
|
|||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
||||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Вечно я про это забываю... Спасибо за замечание ![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |