Shared_ptr cast vs static_cast speed

Shared_ptr cast vs static_cast speed

本文关键字:cast speed static vs Shared ptr      更新时间:2023-10-16

哪个铸件更快?对象指针的static_cast或shared_ptr的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);

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

qSharedPointerCast复制指针,从而增加了数据块的参考计数,并使您锁定了锁定的cacheline更新。static_cast<Derived*>(newBase.data())使用已经存在的指针并且没有增加任何东西 - 它只是一种类型的安全时间结构,它没有开销。

因为 newBase持有 Base的实例,并且您投放到 Derived,因此您的示例显然是未定义的行为(代码中的错误(。

auto Derived1 = static_cast<Derived*>(newBase.data());必须更快一些,因为它不会创建新的强参考,因此参考计数器不会增加。qSharedPointerCast<Derived>(newBase)必须这样做。

无论如何,速度差异很小,以至于无关紧要。您正在谈论微观优化。我怀疑如果您进行一些测量,您会发现显着差异。

请将您的精力集中在理解继承(依赖性反转(以及指针如何处理和忽略现在的小小的优化上。