news 2026/5/13 1:46:57

【C++STL】新手也能会:string 模拟实现保姆级指南!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【C++STL】新手也能会:string 模拟实现保姆级指南!
构造函数

代码语言:javascript

AI代码解释

//无参的默认构造 string::string() :_str(new char[1]{'\0'}) ,_size(0) ,_capacity(0) {} //带参的构造 string::string(const char* str) :_size(strlen(str)) //,_size(strlen(str)) //,_capacity(strlen(str)) { cout << "构造" << endl; _capacity = _size; _str = new char[_size+1];//开跟str一样大的空间 还要加1 给\0预留空间 memcpy(_str, str, _size+1); }

带参的构造中有一个细节:不要使用三个strlen 因为strlen效率不高。因为初始化列表有一个按照声明顺序初始化的逻辑,所以初始化列表与声明顺序是有关联关系的,如果实在不好在初始化列表初始化那就在函数体内部初始化。

1.2析构函数

代码语言:javascript

AI代码解释

//析构函数 string::~string() { delete[] _str; _str = nullptr; _size = 0; _capacity = 0; }
1.3拷贝构造

代码语言:javascript

AI代码解释

//拷贝构造 string::string(const string& s) { //开辟新空间 _str = new char[s._capacity+1]; //拷贝旧数据 memcpy(_str, s._str, s._size+1); _size = s._size; _capacity = s._capacity; }

拷贝构造要注意开辟空间和拷贝数据的时候一定不要忘记给\0预留一个空间,因为**string**内部的**_size(有效数据个数)**它指向的是最后一个数据的下一个位置的数据也就是**\0**,而且字符串一般以**\0**作为结束的标识符。

1.4赋值重载

代码语言:javascript

AI代码解释

string& string::operator=(string& s) { //防止给自己赋值 if (this != &s) { //开新空间拷贝旧数据 char* tmp = new char[s._size + 1]; memcpy(tmp, s._str, s._size + 1); delete[] _str; _str = tmp; _size = s._size; _capacity = s._capacity; } return *this; }

对于拷贝构造和赋值重载还有一些现代写法,现代写法相比于传统的写法更加简洁。内部的逻辑其实就是调用std里面的swap交换底层的成员变量来实现的,如果想了解请点击:

1.5再探深浅拷贝问题

之前在类和对象时我们说过如果一个有资源的类我们在没有显示写拷贝构造和赋值重载的时候,使用编译器默认生成的拷贝构造那么完成的就是浅拷贝:

www.dongchedi.com/article/7592326493200482841
www.dongchedi.com/article/7592329049750995481
www.dongchedi.com/article/7592327070701961753
www.dongchedi.com/article/7592322906135413273
www.dongchedi.com/article/7592308231180026392
www.dongchedi.com/article/7592331190716498457
www.dongchedi.com/article/7592320610865676825
www.dongchedi.com/article/7592326493201007129
www.dongchedi.com/article/7592322714795688510
www.dongchedi.com/article/7592327392942178841
www.dongchedi.com/article/7592319617927283225
www.dongchedi.com/article/7592327476282638873
www.dongchedi.com/article/7592319094112846360
www.dongchedi.com/article/7592326854393152025
www.dongchedi.com/article/7592319386741244441
www.dongchedi.com/article/7592321316729504281
www.dongchedi.com/article/7592319724022039102
www.dongchedi.com/article/7592327140348379672
www.dongchedi.com/article/7592319412238418457
www.dongchedi.com/article/7592319724022137406
www.dongchedi.com/article/7592319070578917950
www.dongchedi.com/article/7592317677180486168
www.dongchedi.com/article/7592331430680953368
www.dongchedi.com/article/7592317943112057368
www.dongchedi.com/article/7592312482736685593
www.dongchedi.com/article/7592326787452011070
www.dongchedi.com/article/7592320171805934142
www.dongchedi.com/article/7592312175293891097
www.dongchedi.com/article/7592326095602221593
www.dongchedi.com/article/7592313460353466942
www.dongchedi.com/article/7592315921234985497
www.dongchedi.com/article/7592318584517493310
www.dongchedi.com/article/7592313903104164377
www.dongchedi.com/article/7592314981853905432
www.dongchedi.com/article/7592327419139654169
www.dongchedi.com/article/7592312482736620057
www.dongchedi.com/article/7592327392941589017
www.dongchedi.com/article/7592313382368297497
www.dongchedi.com/article/7592317900531548734
www.dongchedi.com/article/7592315372943327769
www.dongchedi.com/article/7592311873639432729
www.dongchedi.com/article/7592316979160121918
www.dongchedi.com/article/7592312719127511577
www.dongchedi.com/article/7592316786557616664
www.dongchedi.com/article/7592327116290032153
www.dongchedi.com/article/7592326416835002904
www.dongchedi.com/article/7592313347400270360

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 11:14:54

使用ms-swift进行用户画像精细化运营

使用 ms-swift 进行用户画像精细化运营 在当今个性化体验成为核心竞争力的时代&#xff0c;企业不再满足于“千人一面”的粗放式运营。从电商平台推荐商品&#xff0c;到内容平台推送资讯&#xff0c;再到智能客服理解用户意图&#xff0c;背后都依赖一个关键系统——用户画像。…

作者头像 李华
网站建设 2026/5/12 9:42:03

使用ms-swift进行地方志文献整理与索引

使用ms-swift进行地方志文献整理与索引 在中华大地绵延千年的文化长河中&#xff0c;地方志作为记录地域历史、风土人情、政经变迁的重要载体&#xff0c;承载着极其丰富的非结构化文本信息。然而&#xff0c;这些珍贵的文献大多以扫描图像或OCR转录后的原始文本形式存在&#…

作者头像 李华
网站建设 2026/5/4 18:48:56

Multisim元器件图标大全:批量导入图标的实战案例

批量导入Multisim元器件图标&#xff1a;从零构建高效设计资源库的实战指南 你有没有遇到过这种情况&#xff1a;手头有一堆新型号运放、电源管理芯片或专用传感器&#xff0c;想在Multisim里做仿真&#xff0c;却发现标准元件库里根本找不到&#xff1f;一个个手动创建符号不仅…

作者头像 李华
网站建设 2026/5/9 13:35:23

终极视频画质革命:本地AI让模糊影像重获新生

终极视频画质革命&#xff1a;本地AI让模糊影像重获新生 【免费下载链接】SeedVR-7B 项目地址: https://ai.gitcode.com/hf_mirrors/ByteDance-Seed/SeedVR-7B 还在为那些珍贵的家庭录像画质模糊而遗憾吗&#xff1f;那些记录着重要时刻的视频&#xff0c;因为年代久远…

作者头像 李华
网站建设 2026/5/5 23:53:05

ms-swift框架下音乐歌词生成与风格迁移

ms-swift框架下音乐歌词生成与风格迁移 在AI创作逐渐渗透到艺术领域的今天&#xff0c;一个曾经看似遥远的场景正在成为现实&#xff1a;你只需输入“写一首周杰伦风格的中国风情歌”&#xff0c;系统便能自动生成押韵工整、意象丰富、情感细腻的歌词。这背后&#xff0c;不仅…

作者头像 李华