Профилирование кода, который сильно использует shared_ptrs, я обнаружил, что reset() был неожиданно дорогим.Почему std :: tr1 :: shared_ptr <>. Reset() так дорого?
Например:
struct Test {
int i;
Test() {
this->i = 0;
}
Test(int i) {
this->i = i;
}
} ;
...
auto t = make_shared<Test>(1);
...
t.reset(somePointerToATestObject);
Трассировка сброс() в последней строке (под VC++ 2010), я обнаружил, что она создает новый объект подсчета ссылок.
Есть ли более дешевый способ, который повторно использует существующий счетчик ссылок и не беспокоит кучу?
просто интересно, почему вы делитесь произвольным значением указателя '1'? – ianmac45
@ian: Это не так. Знаете ли вы, что делает 'make_shared'? – fredoverflow
Какой тип 'somePointerToATestObject'? –