Какова потеря производительности weak_ptr?

Я в настоящее время разрабатываю структуру объекта для игры, и самая естественная организация в моем случае стала деревом. Будучи большим поклонником интеллектуальных указателей я использую shared_ptrисключительно. Однако в этом случае детям в дереве будет нужен доступ к, он - родитель (пример - существа на карте должны смочь получить доступ к данным карты - следовательно данные их родителей.

Направление владения, конечно, которым владеет карта, это - существа, поэтому содержит совместно использованные указатели на них. Для доступа к данным карты из существа, нам однако нужен указатель на родителя - интеллектуальный указатель, путь состоит в том, чтобы использовать ссылку, следовательно a weak_ptr.

Однако я когда-то считал ту блокировку a weak_ptr дорогая операция - возможно, это больше не верно - но полагая что weak_ptr будет блокироваться очень часто, я обеспокоен, что этот дизайн обречен с низкой производительностью.

Следовательно вопрос:

Что потеря производительности блокировки является weak_ptr? Насколько значительный это?

27
задан Kornel Kisielewicz 30 April 2010 в 22:40
поделиться

1 ответ

Из исходного кода 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.

13
ответ дан 28 November 2019 в 05:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: