Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Организация подсчета ссылок для умного указателя |
Автор: azesmcar 23.11.2007, 23:13 | ||||
Добрый вечер, Пишу умный указатель, столкнулся с такой вот проблемой. К примеру
(это далеко не идеальный код умного указателя, просто для примера написал) и...возьмем к примеру такой вот код в функции main
в этом случае наш счетчик ссылок будет иметь значение 2, что неверно, ведь mc_ptr1 и mc_ptr2 разные обьекты..несмотря на то что типы у них одинаковые. Следовательно подсчет ссылок организован нерверно. Первое решение пришедшее на ум это использовать std::map. Но мне оно не кажеться самым лучшим, почему то не покидает чувство что есть вариант получше. Попробовал посмотреть как реализован boost::shared_ptr, но boost как оказался не блещет обилием понятного кода и решил что лучше спросить у тех кто сталкивался, чем копаться в классах sp_counted_base, sp_counted_impl, sp_counted_base, weak_count итд... Заранее спасибо |
Автор: MAKCim 24.11.2007, 00:00 | ||
|
Автор: archimed7592 24.11.2007, 00:03 | ||
Есть несколько способ подсчитывать ссылки. 1. Построение связного списка из уиных указателей(т.о., когда список пуст, память удаляется). 2. Создание динамического счётчика. Вот простой пример для 2-го случая:
ps. Писал здесь, мог облажаться... Добавлено через 1 минуту и 27 секунд У MAKCimа код короче, а у меня более повторно используемый ![]() |
Автор: azesmcar 24.11.2007, 00:14 | ||||
ааааа ![]() Почему то все время на static тянуло ![]() остальное уже сам додумаю. Всем спасибо |
Автор: JackYF 24.11.2007, 00:31 |
тему-то закрой ;) |
Автор: UnrealMan 24.11.2007, 15:21 |
У вас обоих не учтено самоприсваивание. |
Автор: archimed7592 24.11.2007, 15:25 |
Вечно я про это забываю... Спасибо за замечание ![]() |