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