2017-05-30 67 views
0

哪个投射速度更快?对象指针的static_cast或shared_ptr的static_cast?Shared_ptr cast vs static_cast速度

实例QT:

class Base; 
class Derived:Base; 

auto newBase = QSharedPointer<Base>::create(); 
auto Derived1 = static_cast<Derived*>(newBase.data()); 
auto Derived2 = qSharedPointerCast<Derived>(newBase); 

该操作是更快,为什么? (我可能有一些语法错误,但我希望我不是)。

+0

两次强制转换都不在运行时编译时执行。你真的对汇编中的某些用法感兴趣吗?无论如何'static_cast'应该更快。 'qSharedPointerCast'执行额外的检查,然后调用'static cast'。 –

+0

@KonstantinT。 QSharedPointer中的计数器在执行投射时是否增加?谢谢。 – Ivan

+0

如果你执行静态转换计数器将**不**增加。这意味着该计数器将与执行演员之前相同。 如果您执行qSharedPointerCast,您将有两个共享指针并且计数器将等于两个。 –

回答

1

qSharedPointerCast复制指针,从而增加数据块的引用计数,并使您锁定缓存行更新。 static_cast<Derived*>(newBase.data())使用已经存在的指针,并且不增加任何内容 - 它只是一个类型安全编译时构造,它没有开销。