哪个演员阵容更快?对象指针的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);
哪种操作更快,为什么? (我可能有一些语法错误,但我希望我不是。)
答案 0 :(得分:1)
qSharedPointerCast
复制指针,从而增加数据块的引用计数,并使锁定的高速缓存行更新成本。 static_cast<Derived*>(newBase.data())
使用已存在的指针并且不会增加任何内容 - 它只是一个类型安全编译时构造,它没有开销。
答案 1 :(得分:0)
由于newBase
拥有Base
的实例并且您强制转换为Derived
,因此您的示例显然是未定义的行为(代码中的错误)。
auto Derived1 = static_cast<Derived*>(newBase.data());
必须更快一点,因为它不会创建新的强引用,因此不会增加引用计数器。 qSharedPointerCast<Derived>(newBase)
必须这样做。
无论如何,速度差是如此之小以至于无关紧要。您正在担心微优化。我怀疑如果进行一些测量,您会注意到明显的差异。
请集中精力了解继承(依赖倒置)以及指针如何处理继承,现在暂时忽略这种微小的优化。