【C/C++基础进阶系列】C/C++ 对象模型 -- 对象构造语义(三)
发布日期:2021-05-07 20:53:22 浏览次数:22 分类:精选文章

本文共 787 字,大约阅读时间需要 2 分钟。

【C/C++基础进阶系列】C/C++ 对象模型 -- 对象构造语义(三)

【1】对象构造函数语义 -- 编译器生成"合成移动构造函数"

#include 
using namespace std;struct TC{ int i; //内置类型可以移动 std::string s; //string类型定义了自己的移动操作};int main(){ TC a; a.i = 100; a.s = "I Love China!"; const char* p = a.s.c_str(); // 编译器为 TC 生成移动构造函数 // 目的向该函数中添加调用 string 类的移动构造函数的代码 // 导致结构/类TC移动构造函数的执行,数据移动不是std::move所为,而是string的移动构造函数所为 TC b = std::move(a); const char* q = b.s.c_str(); // p q 指向不同的内存地址,这是由 string 类的特性导致 return 0;}

移动构造函数语义

  • 1) 若一个类定义了自已的拷贝构造函数、拷贝赋值运算符、析构函数,则编译器不会为该类生成移动构造函数或移动赋值运算符
  • 2) 只有一个没有定义任何自己版本的拷贝构造函数、拷贝赋值运算符、析构函数,且类的每个非静态成员都可以移动时,编译器才会为该类生成移动构造函数或移动赋值运算符

成员可以移动

  • 1. 内置类型的成员变量可以移动
  • 2. 若成员变量是一个类类型且该类具有对应的移动操作相关的函数,则该成员变量可以移动

参考致谢

本博客为博主学习笔记,同时参考了网上众博主的博文以及相关专业书籍,在此表示感谢,本文若存在不足之处,请批评指正。

【1】C++ 新经典

【2】C++11/14 高级编程 Boost 程序库探秘

上一篇:【C/C++基础进阶系列】C/C++ 对象模型 -- 对象构造语义(四)
下一篇:【C/C++基础进阶系列】C/C++ 对象模型 -- 对象构造语义(二)

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年03月31日 14时12分10秒