构造函数

除了一般的构造函数之外,构造函数分为拷贝(复制)构造函数、赋值构造函数、移动构造函数、移动赋值构造函数、析构函数

构造函数分为两大类复制和移动构造函数,根据调用时机不同分为拷贝和赋值两种。

复制与移动的语义

复制和移动的区别是复制和移动类时的语义不一样

对于从B复制到A的复制语义是

  1. 释放A拥有资源
  2. A新建资源空间
  3. 从B复制资源到新建资源空间
  4. 如果B是右值则复制完成后释放B

对于从B移动到A的语义是

  1. 释放A拥有的资源
  2. 将B的资源控制权转给A
  3. 将B的资源控制权指针设置为空

拷贝构造函数的调用时机

1.通过另外一个对象构造对象的时候会调用拷贝构造函数

A a;
//调用拷贝构造
A b(a) or A b = a

2.函数调用对象值传递的时候会调用拷贝构造函数

3.函数返回对象的时候会调用拷贝构造函数

赋值构造函数的调用时机

1.赋值操作时调用

A a;
//调用赋值构造
a = b

移动构造函数的调用时机

A a;
A b = std::move(a);
A b = A();

void f(A&& a); //声明右值版本
f(A()); //调用移动构造

移动赋值函数的调用时机

A a;
A b;
b = std::move(a);
b = A();

results matching ""

    No results matching ""