绪论:
但我们定义一个类时,我们隐式或者显式的指定此类型对象的拷贝、移动、赋值和销毁时做什么。
具体就是通过五种特殊的构造函数,包括:拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符,析构函数。
关于直接初始化和拷贝初始化
当使用直接初始化,我们是实际上是要求编译器使用普通的函数匹配来选择与我们提供的参数最匹配的构造函数,当然包括拷贝构造函数。
拷贝初始化是指用=定义变量,以及
1.将一个对象作为实参传递给一个非引用类型的形参
2.从一个返回类型为非引用类型的函数返回一个对象
3.用花括号列表初始化一个数组中的元素或一个聚合类(所有成员public,没有定义构造函数,没有类累初始值,没有基类)的成员
大多数时候使用拷贝构造函数,此时初始化的右值常常需要转换构造函数进行隐式类型转换;
如
string book = "9999";
实际上
string book = string("9999");
拷贝赋值运算符
析构函数
对于一个给定类,只会有唯一一个析构函数。
如果一个类需要一个析构函数,我们可以肯定,他也需要一个拷贝构造函数和一个拷贝赋值运算符
需要构造函数意味着需要在其中释放动态分配的内存,如果不自己定义拷贝构造函数和拷贝赋值运算符,在同类赋值运算时,会出现多个指针指向同一片内存的情况。
///C++primer学习总结