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);
最後の行 (VC++ 2010 で) の reset() をトレースすると、新しい参照カウント オブジェクトが作成されることがわかりました。
既存の参照カウントを再利用し、ヒープを気にしない安価な方法はありますか?