【发布时间】:2011-05-18 18:34:55
【问题描述】:
我意识到创建、分配、复制和销毁 std::tr1::shared_ptr 或 boost::shared_ptr (由于引用计数机制)会影响(有时很重要)性能。是否正确,一旦构造,访问由 shared_ptr 包裹的指针没有性能损失?
换句话说:给定
std::tr1::shared_ptr<myClass> SharedA(new myClass);
myClass *NakedA = new myClass;
会
SharedA->someClassMember
具有与
相同的开销NakedA->someClassMember
?
【问题讨论】:
-
我不知道,当你测量它时会发生什么?
-
有什么选择?即使需要,也不使用 shared_ptr?
-
@Doug T.- 在简单的测试用例中,它似乎没有什么不同,但是在我正在处理的大型代码中,我的分析器在访问指针时显示了一些开销(尽管它看起来它应该是内联的,因此没有区别)
-
@Bo- 从技术上讲,托管指针不是“需要的”。它往往是一个很好的设计选择,并且在大多数情况下应该被使用。就我而言(一个科研组代码),我可以负担构造/分配/等的开销,但访问 shared_ptr 会拖慢速度,据我了解,情况并非如此。
-
您使用的是哪种分析器?如果
operator->方法已被内联,则采样分析器应该无法区分。无论如何,检测分析器都会记录该方法的调用,并且测量结果会出现偏差,因为它不会测量在普通旧指针上使用普通旧->运算符,因为它根本不会检测这些指令。
标签: c++ pointers boost smart-pointers tr1