Я в настоящее время разрабатываю структуру объекта для игры, и самая естественная организация в моем случае стала деревом. Будучи большим поклонником интеллектуальных указателей я использую shared_ptr
исключительно. Однако в этом случае детям в дереве будет нужен доступ к, он - родитель (пример - существа на карте должны смочь получить доступ к данным карты - следовательно данные их родителей.
Направление владения, конечно, которым владеет карта, это - существа, поэтому содержит совместно использованные указатели на них. Для доступа к данным карты из существа, нам однако нужен указатель на родителя - интеллектуальный указатель, путь состоит в том, чтобы использовать ссылку, следовательно a weak_ptr
.
Однако я когда-то считал ту блокировку a weak_ptr
дорогая операция - возможно, это больше не верно - но полагая что weak_ptr
будет блокироваться очень часто, я обеспокоен, что этот дизайн обречен с низкой производительностью.
Следовательно вопрос:
Что потеря производительности блокировки является weak_ptr? Насколько значительный это?
Из исходного кода Boost 1.42 (
строка 155):
shared_ptr<T> lock() const // never throws
{
return shared_ptr<element_type>( *this, boost::detail::sp_nothrow_tag() );
}
ergo, комментарий Джеймса МакНеллиса верен; это стоимость копирования-конструирования shared_ptr
.