Bee*_*and 2 c++ reference copy-constructor
我已经定义了以下类:
class Action
{
public:
Action(){ _bAllDone = false; }
void AddMove( Move & m );
private:
std::deque<Move> _todo;
bool _bAllDone;
};
Run Code Online (Sandbox Code Playgroud)
成员AddMove定义如下:
void Action::AddMove( Move & m )
{
_todo.push_back( m );
}
Run Code Online (Sandbox Code Playgroud)
我注意到没有这个函数的引用参数,复制构造函数被调用了两次,带有引用参数的wheree只被调用一次.仅调用一次复制构造函数而不是两次是使用引用参数的充分理由吗?
Uri*_*Uri 17
STL中的deque类应该保留传递给其push_back方法的元素的副本.这是一个复制构造函数的来源.
如果你在addMove()中删除了引用,你将首先获得参数的副本(因此一次调用复制构造函数),然后当你向后推时,你将获得第二个副本.
复制构造函数的双重调用是浪费的,因此引用是可取的.但是,您应该将addMove()的参数声明为const引用,以向调用者指示不会修改该元素.在这样的保证下(假设你不破坏它),可以安全地通过引用传递对象而不用担心并且不支付对象副本的惩罚.