C++学习之拷贝构造函数
2014-11-14 16:36
113 查看
嘛是拷贝构造函数?
如果一个构造函数的第一个参数是’自身类‘ ‘类型’的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数。如:
【代码1】
拷贝构造函数会被隐式地使用,所以不应该定义成explicit的(explicit构造函数将限制隐式转换,只能以直接初始化的形式使用,如代码2)
【代码2】
当我们自己定义了一个默认构造函数后,编译器就不会为我们再定义一个合成的构造函数,但拷贝构造函数不同!即使我们自己定义的有,编译器也会我们再定义一个!一般情况下,其作用为:将其参数的成员逐个拷贝到正在创建的对象中。即编译器会从参数中给定的对象中依次将每个非static的成员拷贝到正在创建的对象中。内置类型的成员直接拷贝,类类型的成员使用其类自身的拷贝构造函数进行拷贝。
同时,如果一个类有一个‘移动构造函数’,则拷贝初始化有时会使用移动构造函数而非拷贝构造函数来完成拷贝。
什么情况下需要使用拷贝初始化?
【1:使用=定义变量时;如:A a=0;
【2:将一个对象作为实参传递给一个非引用类型的形参时;
【3:从一个返回类型是非引用类型的函数中返回一个对象时;
【4:用花括号列表初始化一个数组中的元素或一个聚合类中的成员时。
为什么拷贝构造函数的参数必须是引用类型?
拷贝构造函数被用来初始化’非引用类‘类型参数!如果参数不是引用类型,则为了调用拷贝构造函数,就必须拷贝其实参,但为了拷贝其实参,又需要调用拷贝构造函数,如此无限循环下去。具体例子请参照:拷贝构造函数的参数为什么必须使用引用类型
来自为知笔记(Wiz)
如果一个构造函数的第一个参数是’自身类‘ ‘类型’的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数。如:
【代码1】
【代码2】
同时,如果一个类有一个‘移动构造函数’,则拷贝初始化有时会使用移动构造函数而非拷贝构造函数来完成拷贝。
什么情况下需要使用拷贝初始化?
【1:使用=定义变量时;如:A a=0;
【2:将一个对象作为实参传递给一个非引用类型的形参时;
【3:从一个返回类型是非引用类型的函数中返回一个对象时;
【4:用花括号列表初始化一个数组中的元素或一个聚合类中的成员时。
为什么拷贝构造函数的参数必须是引用类型?
拷贝构造函数被用来初始化’非引用类‘类型参数!如果参数不是引用类型,则为了调用拷贝构造函数,就必须拷贝其实参,但为了拷贝其实参,又需要调用拷贝构造函数,如此无限循环下去。具体例子请参照:拷贝构造函数的参数为什么必须使用引用类型
来自为知笔记(Wiz)
相关文章推荐
- C++学习笔记(构造函数和拷贝构造函数)
- Effective C++ 学习笔记:为含指针变量的类声明一个拷贝构造函数和一个赋值操作符
- c++学习_拷贝构造函数应用的三种情况
- C++学习:拷贝构造函数
- C++ 拷贝构造函数 的学习
- C++学习体会--构造函数,析构函数,拷贝构造函数
- C++ 学习笔记(13)拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符、析构函数、右值引用、引用限定符
- 开始记录下学习之路 c++ 拷贝构造函数
- c++学习笔记(二):c++拷贝构造函数应用的四种场景
- 从零开始学习c++之拷贝构造函数
- [C++再学习系列] 对待拷贝构造函数和赋值函数的3种境界
- C++学习笔记_5:拷贝构造函数
- C++拷贝构造函数的学习(一)
- C++ 学习之路(1):拷贝构造函数
- c++学习3--拷贝构造函数
- C++学习笔记――引用与拷贝构造函数
- C++学习之拷贝构造函数(深拷贝,浅拷贝)
- C++学习之构造函数、拷贝构造函数
- c++学习笔记--拷贝构造函数
- C++ 学习总结(十)——C++类与对象,及构造函数,析构函数,拷贝构造函数