分析一些大量使用 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(),我发现它创建了一个新的引用计数对象。
有没有更便宜的方法,可以重用现有的引用计数并且不打扰堆?