Shared_ptr cast vs static_cast speed
Shared_ptr cast vs static_cast speed
哪个铸件更快?对象指针的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)
必须这样做。
无论如何,速度差异很小,以至于无关紧要。您正在谈论微观优化。我怀疑如果您进行一些测量,您会发现显着差异。
请将您的精力集中在理解继承(依赖性反转(以及指针如何处理和忽略现在的小小的优化上。
相关文章:
- 如何理解C++标准N3337中的expr.const.cast子句8
- C++Cast运算符过载
- 错误:"cast"未命名类型void setCastDescription(std::string
- 通过使用 const-cast 的非常量引用来延长临时的寿命
- "(void) cast"与功能有什么区别 "__attributes__"来沉默未使用的参数警告?
- C++:"Expected '(' for function-style cast or type construction"错误
- 为什么选择 g++ 给予者:"error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]"
- Gtk+ g_signal_connect() 和 C++ lambda 会导致"invalid cast"错误
- Shared_ptr cast vs static_cast speed
- 在 iOS 上使用 Aruco 构建 OpenCV 时"Functional-style cast from id to double is not allowed"
- 覆盖 CAST 运算符(我认为它被称为向下转换)
- C++错误,隐 <function-style-cast> 式要求使用模板化类一次调用多个构造函数的多个转换
- 如何修复<function-style-cast>错误:无法从'initializer list'转换为asdending比较<W>(模板函子)
- C++ C++ 中的函数声明,键入 CAST
- static_cast会丢弃错误,但C风格的演员cast有效
- C++ cast char * to unsigned char
- "Want Speed? Pass by value"有多真实
- 禁用 Clang 中的"cast from pointer to smaller type uint32_t"错误
- 是否可以使用gcc 3.3版修复与int*cast相关的Sun Solaris OS 5.8分段故障
- C++ const-cast 一个引用