C++深浅拷贝和string类的写法有哪些
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,小编给大家分享一下C++深浅拷贝和string类的写法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、深浅拷贝拷贝
千家信息网最后更新 2026年11月03日C++深浅拷贝和string类的写法有哪些
小编给大家分享一下C++深浅拷贝和string类的写法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
一、深浅拷贝
拷贝这个词对于我们来说应该不陌生,比如我们平常的复制和粘贴就是拷贝;但是如果把拷贝这个词放到C++中来说就有一些复杂了,我们先来看一下什么是浅拷贝:
下面用字符串类来模拟实现。
class Astring{public: //构造函数 Astring(const char* str = "") { _str = new char[strlen(str) + 1]; strcpy(_str, str); } //采用浅拷贝写的构造函数 Astring(const Astring& s) { _str = s._str; } //析构函数 ~Astring() { delete[] _str; _str = nullptr; }private: char* _str;};int main(){ Astring aa("hello C++"); Astring bb(aa); //这里调用拷贝构造 return 0;}当我们执行以上程序的话就会失败,结果如下:
分析如下图所示:

所以我们采用浅拷贝使用同一块空间是不行了,那么怎么办呢?当然是重新开一块和别人同样大小的空间,然后再把别人空间里面的内容给拷贝过来,而这样就是所谓的深拷贝了;我们还是用字符串类来模拟实现深拷贝:
class Astring{public: //构造函数 Astring(const char* str = "") { _str = new char[strlen(str) + 1]; strcpy(_str, str); } //采用深拷贝写的构造函数 Astring(const Astring& s) { _str = new char[strlen(s._str) + 1]; strcpy(_str, s._str); } //析构函数 ~Astring() { delete[] _str; _str = nullptr; }private: char* _str;};int main(){ Astring aa("hello C++"); Astring bb(aa); return 0;}分析如下图所示:

二、string类的两种写法
有了上面我们知道的深浅拷贝,所以我们明白类中的拷贝构造函数和赋值重载一定要用深拷贝来实现,不过拷贝构造函数和赋值重载还是有两种写法的。
1. 传统写法
传统写法就是要自己开辟空间自己来拷贝别人的东西,什么事情都要自己干,代码如下:
//搞一个命名空间,里面实现自己写的string类namespace cjy{ class string { public: //构造函数 string(const char* str = "") :_str(new char[strlen(str) + 1]) { strcpy(_str, str); } //拷贝构造函数 string(string& s) :_str(new char[strlen(s._str) + 1]) { strcpy(_str, s._str); } //赋值重载,s1=s3 string& operator=(const string& s) { if (this != &s) { char* tmp = new char[strlen(s._str) + 1]; delete[] _str; _str = tmp; strcpy(_str, s._str); } return *this; } //析构函数 ~string() { delete[] _str; _str = nullptr; } private: char* _str; };}2. 现代写法
现代写法就是复用其它的函数,自己不用干活,交给其它函数来帮你实现,代码如下:
//现代写法:拷贝构造、赋值重载函数namespace cjy{ class string { public: //构造函数 string(const char* str = "") { _str = new char[strlen(str) + 1]; strcpy(_str, str); } //拷贝构造函数 string(const string& s) :_str(nullptr) { string tmp(s._str); std::swap(_str, tmp._str); } //赋值重载 string& operator=(string s) { std::swap(_str, s._str); return *this; } private: char* _str; };}以上是"C++深浅拷贝和string类的写法有哪些"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
拷贝
函数
写法
C++
空间
深浅
就是
内容
篇文章
代码
传统
字符
字符串
还是
分析
不行
复杂
平常
陌生
不怎么
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
耶加雪菲
上海睿民互联网科技有限公司
华服互联网科技怎么样
互联网科技工作委员会副主任毛军
科技金融是不是互联网金融
互联网科技资迅
网络科技有限互联网
远信互联网科技
安徽鑫晟辉互联网科技
哈尔滨秒房互联网科技有限公司
汉立互联网科技有限公司联系电话
互联网实体化科技化
北京三清互联网科技
岳阳华臻互联网科技有限公司
注册互联网科技公司经营范围大全
沐思想互联网科技有限公司
米泉互联网科技专业怎么样
伍佰万互联网科技是干嘛的
每日互联网科技新闻
山东亿川互联网科技有限责任公司
善班互联网科技
互联网科技公司官网
互联网与未来科技
互联网科技咨询
互联网科技大会案例
科技赋能视角下互联网保险发展
万物互联网智能科技
同城互联网络科技
三亚科技创新互联网基地
10位科技互联网大佬