【发布时间】:2010-06-15 13:11:15
【问题描述】:
分析一些大量使用 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 下),我发现它创建了一个新的引用计数对象。
有没有更便宜的方法,可以重用现有的引用计数并且不会打扰堆?
【问题讨论】:
-
只是想知道,你为什么要共享
1的任意指针值? -
@ian:他不是。你知道
make_shared是做什么的吗? -
somePointerToATestObject是什么类型? -
@fred:我以为我做到了。和qt的qsharedpointer一样吧?
-
算了。 shared_ptr 重置不是您的瓶颈,也永远不会。
标签: c++ visual-studio-2010 shared-ptr tr1