Boost Weak_Ptr: Уничтожение обходится дороже, чем ожидалось

По какой-то причине мы ' Мы видим, что уничтожение слабых указателей обходится дорого. Вот код виновника:

~weak_count() // nothrow  
{  
    if(pi_ != 0) pi_->weak_release();  // Consumes a huge chunk of our time.
#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)  
    id_ = 0;  
#endif  
} 

Мы не в режиме отладки, и отладочные хуки не задействованы. Слабый релиз отнимает поистине феноменальное количество времени. Это известная проблема? Мы что-то делаем не так?

Версия Boost: 1.36
Компилятор: VS2008 Compiler Suite.

К сожалению, мы заблокированы этой версией Boost по разным причинам, поэтому мне больше интересно, могут ли такие причудливые расходы дублироваться в новых версиях или представляют собой результат известной плохой практики. Мы уничтожаем только порядка 500 тыс. Слабых указателей, что не должно приводить к заметной разнице в производительности от уничтожения аналогичного количества необработанных указателей. Конечно, не увеличение стоимости в 2,5-4 раза. Обратите внимание, что мы не удаляем объекты, на которые нацелены указанные указатели. Эти расходы связаны исключительно с уничтожением самих указателей.

Что здесь происходит?

6
задан Christian Strempfer 1 October 2014 в 10:57
поделиться