条款05:了解C++默认编写并调用哪些函数
在C++11之后,这发生了一点变化。主要是默认函数新增了移动构造函数和移动赋值操作符。
与拷贝构造函数不同,移动构造函数不分配任何新内存;它接管给定的StrVec中的内存。在接管内存之后,它将给定对象中的指针都置为nullptr。这样就完成了从给的对象的移动操作,此对象将继续存在。最终,移后源对象会被销毁。
//移动构造函数
StrVec::StrVec(StrVec &&s) noexcept:elements(s.elements), first_free(s.first_free), cap(s.cap){
s.elements = nullptr;
s.first_free = nullptr;
s.cap = nullptr;
}
移动赋值运算符执行与析构函数和移动构造函数相同的工作。类似拷贝赋值运算符,移动赋值运算符必须正确处理自赋值。
//移动赋值运算符
StrVec& StrVec::operator=(StrVec &&rhs) noexcept{
//直接检测自赋值:检测this指针与rhs的地址是否相同
if(this != &rhs){
free(); //释放已有元素
elements = rhs.elements; //从rhs接管资源
first_free = rhs.first_free;
cap = rhs.cap;
//将rhs置为可析构状态
rhs.elements = rhs.first_free = rhs.cap = nullptr;
}
return *this;
}
常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。
昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
分类:
[1] C&Cpp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
2020-03-14 MFC中获取GUID
2020-03-14 MFC中的DrawItem()和 OnDrawItem()
2018-03-14 傅里叶级数(FS)以及FT、DTFT、DFS和DFT