浅复制(默认、复制构造函数,赋值操作符重载):当涉及到动态内存时,不安全;
深复制(默认、复制构造函数,赋值操作符重载):当涉及到动态内存时,安全;
移动语义(移动构造函数,移动赋值操作符重载):一种特殊的浅复制定义(右值引用),用来避免不必要的副本机制和临时对象的创建与删除。
要实现移动语义,需要采取某种方式,让编译器知道什么时候需要复制,什么时候不需要。这就是右值引用发挥作用的地方。可定义两个构造函数。其中一个是常规复制构造函数,它使用const左值引用作为参数,这个引用关联到左值实参;另一个是移动构造函数,它使用右值引用作为参数,该引用关联到右值实参。复制构造函数可执行深复制,而移动构造函数只调整记录。在将所有权转移给新对象的过程中,移动构造函数可能修改其实参,这意味着右值引用参数不应 是const。
代码:
// stdmove.cpp -- using std::move()
#include <iostream>
#include <utility>
// use the following for g++4.5
// #define nullptr 0
// interface
class Useless
{
private:
int n; // number of elements
char * pc; // pointer to data
static int ct; // number of objects
void ShowObject() const;
public:
Useless();
expli