C++ || 运算符重载与拷贝构造
2021/11/20 20:40:05
本文主要是介绍C++ || 运算符重载与拷贝构造,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
拷贝构造函数
拷贝构造函数:用一个已存在的对象给另一个正在生成的对象初始化的时候自动调用的成员方法
如果没有自己实现,会自动生成一个浅拷贝的拷贝构造(影响堆上内存=>指针)
如果自己实现,就不会生成
注意:
- 拷贝构造要防止浅拷贝
- 拷贝构造函数一定要传引用,防止死递归
Person(const Person& src) { cout << "Person(const Person& src)" << endl; _age = src._age; _sex = src._sex; _name = new char[strlen(src._name) + 1]; memset(_name,0, strlen(src._name) + 1); for (int i = 0; i < strlen(src._name); i++) { _name[i] = src._name[i]; } }
等号运算符重载
等号运算符重载:使用一个已存在的对象,给另一个已存在的对象赋值时自动调用的成员方法
如果不自己实现,就会自动生成一个浅拷贝的等号运算符重载
注意:
- 防止自赋值
- 防止内存泄漏
- 防止浅拷贝
Person& operator=(const Person& src) {//等号运算符重载 返回引用 保证返回对象一定存在 cout << " void operator=(const Person& src)" << endl; //防止自赋值 if (this == &src) { return *this ; } //防止内存泄漏 delete[] _name; //防止浅拷贝 _name = new char[strlen(src._name) + 1]; memset(_name, 0, strlen(src._name) + 1); for (int i = 0; i < strlen(src._name); i++) { _name[i] = src._name[i]; } return *this; }
拷贝构造与等号运算符重载的区别:
拷贝构造是用一个已存在的对象给一个正在生成的对象初始化
等号运算符重载是用一个已存在的对象给另一个已存在的对象赋值
int a;
int c= int ();
int b(a); //拷贝构造
int d = a; //拷贝构造
c = a; //等号运算符重载
这篇关于C++ || 运算符重载与拷贝构造的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享