2015-08-13 171 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. 保存堆栈空间。通过值传递的智能指针需要比引用更多的空间。