gpt4 book ai didi

c++ - 为什么 std::tr1::shared_ptr<>.reset() 如此昂贵?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:58:05 34 4
gpt4 key购买 nike

分析一些大量使用 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 下),我发现它创建了一个新的引用计数对象。

有没有更便宜的方法,重用现有的引用计数并且不打扰堆?

最佳答案

在一般情况下,您不能重用现有的引用计数,因为可能有其他 shared_ptrweak_ptr 在使用它。

如果您可以使用 make_shared() 创建 somePointerToATestObject,那么实现可以对引用计数和目的。这将为您节省一次堆分配。

关于c++ - 为什么 std::tr1::shared_ptr<>.reset() 如此昂贵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3045418/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com