2015-08-13 166 views
0

我目前正在研究一些代碼(C++ 11),這些代碼大量使用了指針上的引用,例如,我爲什麼要在智能指針上使用智能指針作爲C++中的參數引用

class SomeClass; 

class MyClass 
{ 
public: 
    MyClass(const std::shared_ptr <SomeClass> & class) 
    : m_class(class) 
    {} 

private: 
    std::shared_ptr <SomeClass> m_class 
} 

我在這方面做了一些測試(使用Visual Studio 2013 VC12),並且似乎沒有時間差異。移交一個Null-Ptr也是可以的。

那麼在這種情況下使用參考的可能原因是什麼?

+0

否則 - 它創建一個副本並增加'ref_count'直到刪除。我錯了嗎,@BartoszKP? –

+0

@VictorPolevoy只要構造函數存在,參數就會被刪除,所以它無關緊要。並且還爲'm_class'創建了一個副本。 – BartoszKP

回答

1

可能的原因是:

  1. 性能。按值傳遞參考(一個CPU寄存器)而不是智能指針應該更快。你的性能測試有問題。
  2. 保存堆棧空間。通過值傳遞的智能指針需要比引用更多的空間。