C++ 拷贝构造函数和拷贝赋值运算符的区别
C++ 区别 运算符 拷贝 赋值 构造函数
2023-09-14 09:11:22 时间
转自:https://www.cnblogs.com/wangguchangqing/p/6141743.html
1.区别
拷贝构造函数和赋值运算符的行为比较相似,都是将一个对象的值复制给另一个对象;
但是其结果却有些不同,拷贝构造函数使用传入对象的值生成一个新的对象的实例,而赋值运算符是将对象的值复制给一个已经存在的实例。
拷贝构造函数也是一种构造函数,那么它的功能就是创建一个新的对象实例;赋值运算符是执行某种运算,将一个对象的值复制给另一个对象(已经存在的)。
调用的是拷贝构造函数还是赋值运算符,主要是看是否有新的对象实例产生。如果产生了新的对象实例,那调用的就是拷贝构造函数;如果没有,那就是对已有的对象赋值,调用的是赋值运算符。
2.例子
class Person { public: Person(){cout<<"无参构造函数"<<endl;} Person(const Person& p) { cout << "Copy Constructor" << endl; } Person& operator=(const Person& p) { cout << "Assign" << endl; return *this; } private: int age; string name; }; void f(Person p) { return; } Person f1() { Person p;//无参构造函数 return p; } int main(){ Person p; //无参构造函数 Person p1 = p; // Copy Constructor Person p2; //无参构造函数 p2 = p; // Assign f(p2); // Copy Constructor cout<<"-----"<<endl; p2 = f1(); // Assign cout<<"-----"<<endl; Person p3 = f1(); //
return 0; } #输出: 无参构造函数 Copy Constructor 无参构造函数 Assign Copy Constructor ----- 无参构造函数 Assign ----- 无参构造函数
唯一不明白的地方是最后一句,调用了f1内部创建了对象,打印“无参构造函数”,那么又赋值给p3,为什么没调用拷贝构造函数呢?不明白。
相关文章
- C++迭代器失效问题(insert、erase)
- C/C++ #include<> 和 #include""的区别
- C++ 中“空引用”与“空指针”的区别
- (C++)STL排序函数sort和qsort的用法与区别
- Open3D(C++) 无法读取中文名称点云的解决办法
- paip.c++ 指针跟引用的区别.
- C++学习心得与c语言到c++衔接技巧
- C++获取exe所在的路径
- C++ 中 string和char* 的区别
- c++ 随机数 取值范围 多线程
- c++ vector C++ vector存放结构体 并且排序
- Ubuntu20.04下,qt交叉编译报错::15: warning: identifier ‘nullptr‘ is a keyword in C++11 [-Wc++0x-compat]
- C++之auto与decltype用法区别(一百一二十五)
- C++中new int()与new int[]区别(二十四)
- C++ 2.0版本的富文本RICHEDIT20A的一些总结
- C++中全局变量、函数与静态变量、函数的区别
- 【C++】 四种强制类型转换(static_cast 与 dynamic_cast 的区别!)
- C++ 反汇编:多维数组与指针
- Dynamsoft Label Recognizer SDK FOR .NET/C++/JAVA
- 【C++】第六篇(基础)命名空间
- C++ , STL ---- 常用容器
- C/C++学习笔记十二 Input and Output (I/O)(2)
- 【C++】算法集锦(2):递归精讲
- C++学习第五节:C和C++的区别第三节课
- C++学习第三节:C和CPP的区别第一节课
- 比较C++中的4种类型转换方式