2011-12-31 3 views
0

Я прочитал кучу про умный ptr и решил использовать intrusive_ptr с моей собственной реализацией для подсчета ссылок.Как эффективно использовать intrusive_ptr в этой ситуации?

Сказал, что мне теперь предстоит решать другую проблему, как решить ссылочные циклы с учетом weak_ptr нельзя использовать с классом auto_ptr.

Будет ли хорошо разрешать циклы с использованием необработанных указателей, где должны храниться слабые ссылки? Последовательность этого заключается в том, что если удалена сильная ссылка, слабые ссылки не будут уведомлены/обнулены, но я думаю, что правильно arquitecting зависимости, которые он мог бы быть хорошим вариантом, но я мог быть не так.

Не могли бы вы дать какое-либо мнение об этом ?.

+2

Ваши вопросы расплывчаты. В вашем конкретном сценарии вам действительно нужны возможности, которые предоставляет 'weak_ptr', или нечетный указатель? (А именно, вам нужна возможность проверить, действителен ли указатель без прав?) Если вы ответите на этот вопрос, у вас появится ответ на заданный вами вопрос. –

+0

Что означает «arquitecting»? –

+0

Он имел в виду архитектуру – Daniel

ответ

1

Просто используйте shared_ptr. Это проще в использовании и работает с weak_ptr, о котором вы упомянули. Может быть, когда-нибудь вы найдете случай, когда вы хотите использовать навязчивый характер, но до тех пор сохраните его просто.

+0

На первый взгляд я использовал shared_ptr, но мне это кажется немного взломанным. Вы должны вывести свой класс из enable_shared_from_this, если вы хотите передать это, двойные указатели на удаление могут быть очень легкими в создании, трудности с пониманием того, когда будет создан новый счетчик ссылок и т. Д. Я не говорю, что shared_ptr не является хорошим вариант, но мне было трудно полностью понять его, поэтому я предпочел пойти с более простым решением, таким как intrusive_ptr. Возможно, это не было хорошим решением. – Notbad

+1

Трава всегда зеленее с другой стороны, я думаю. С того места, где я сижу, intrusive_ptr не так прост в использовании, как shared_ptr. Кстати, если вы используете boost :: make_shared <>(), вы можете получить только одно распределение кучи, а не два с shared_ptr. И вы можете также взглянуть на пулы, прежде чем отказаться от shared_ptr. Вы можете видеть, как некоторые люди используют эту комбинацию здесь: http://stackoverflow.com/questions/2911154/custom-pool-allocator-with-boost-shared-ptr –

+0

verty informative. Имейте это в виду. – Notbad

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