Bar*_*uch 1 c++ move-semantics c++11
如果我有一个管理一些动态内存的类(例如矢量类型)并且它已经有一个移动构造函数,为函数提供移动感知重载是否有意义,或者移动构造函数是否有意义照顾它?
例如,我应该使用Class&&
变量重载哪些(如果有的话):
// the move-aware overload for all of these would be
// void FuncX(Class&&);
void Func1(Class);
void Func3(Class&); // doesn't make a local copy
void Func4(Class&); // makes a local copy
void Func5(Class const);
void Func7(Class const&); // doesn't make a local copy
void Func8(Class const&); // makes a local copy
Run Code Online (Sandbox Code Playgroud)
他们中的任何一个都失去了优化机会,因为我没有提供移动感知变体吗?
Func1
并且Func5
具有相同的签名,并且已经"移动感知",因为可以使用左值或右值调用它们,并且可以在传递右值时构造参数.
Func3
并且Func4
目前不能用rvalues调用,重载它们Func(Class&&)
将是语义的重大变化,而不仅仅是优化.
Func7
已经可以用rvalues调用,没有什么可以通过复制或移动进行初始化,重载它将是毫无意义的.
Func8
可以使用rvalues调用但执行复制,将该函数更改为Func8(Class)
使用副本或移动初始化参数,具体取决于是使用左值还是右值调用.或者,重载它Func8(Class&&)
也可以让你在传递右值时避免复制,但现在你有两个要维护的功能.
归档时间: |
|
查看次数: |
333 次 |
最近记录: |