我知道c ++移动语义应该节省处理器的能力和内存,因为
Move::Move(Shallow&& source) noexcept // Move constructor
{
data = source.data; // Assume data is an array of size = size and all initiated to a user specific value
size = source.size;
source.size =0;
source.data ={nullptr};
}
假设所有数组索引都初始化为特定变量,因此move语义将只将数组指针保存在内存中,并使源数组为空,就像上面的示例一样,这将防止动态创建新数组如果我们使用复制构造函数(特定于深度复制构造函数),但是
1)如果我们假设data只是一个简单的整数,或者使用move构造函数有什么好处? 甚至非常大的未初始化数组2)此move构造函数似乎与仅使用shallow调用复制构造函数 复制像
Copy::Copy(const &source){ // A shallow copy
data = source.data; // Assume data is an array of size = size
size = source.size;
}
当然唯一的区别是Nulling data和size在move结构中,因此在内存和性能方面,上述两个代码段之间都没有任何性能改进,因为Nulling数据指针和大小实际上并没有节省我们的空间或记忆的权利,或者我在这里想念的东西。
这个问题,以便我可以知道何时使用浅表复制或Move语义,以及它们之间是否有任何区别(以移动方式使属性无效)。
如果我们假设数据只是一个简单的整数,甚至是一个非常大的未初始化的数组,那么使用move构造函数会有什么好处?>
编号
此移动构造函数似乎与仅使用浅层复制调用复制构造函数几乎相同。
是。
“移动”仅用于转移资源所有权,并且只有在资源是间接持有(例如通过指针)的情况下,您才可以这样做。然后,您可以交换指针。但是,如果您必须交换实际数据,则基本上只是一个副本。