2017-05-30 87 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())使用已經存在的指針,並且不增加任何內容 - 它只是一個類型安全編譯時構造,它沒有開銷。