Mar*_*rkD 3 c++ boost pointers smart-pointers tr1
我意识到创建,分配,复制和销毁std :: tr1 :: shared_ptr或boost :: shared_ptr(由于引用计数机制)会产生(有时很重要)性能损失.是否正确,一旦构造,访问由shared_ptr包装的指针没有性能损失?
换句话说:给定
std::tr1::shared_ptr<myClass> SharedA(new myClass);
myClass *NakedA = new myClass;
Run Code Online (Sandbox Code Playgroud)
不
SharedA->someClassMember
Run Code Online (Sandbox Code Playgroud)
有相同的开销
NakedA->someClassMember
Run Code Online (Sandbox Code Playgroud)
?
在没有调试支持的优化构建中,不应该有任何开销.您可以通过查看您正在使用的实现来了解.有可能,它的operator->
重载只返回指向指向对象的指针,它的operator*
重载只是取消引用这个指针.
(这就是Visual C++ 2010实现的std::shared_ptr
功能:每个重载操作符只调用一个只返回指针的"get"函数;没有任何类型的锁定或其他开销.其他实现可能不同.)
未经优化的构建可能不会内联运算符重载,并且如果您的实现具有您启用的额外调试支持,则它可能执行额外的检查(例如,如果您取消引用空指针,则可能是断言).
归档时间: |
|
查看次数: |
977 次 |
最近记录: |