当前位置: 首页 > news >正文

温州网站建设优化公司飞色 网站建设

温州网站建设优化公司,飞色 网站建设,上海ui设计公司,郑州网站建设开拓者本节介绍c的移动语义与新特性std::move#xff0c;本节介绍的内容主要用在性能优化上。 c移动语义和c左值右值的内容相关联#xff0c;可以先看之前发的左值右值内容。 不使用移动语义的代码如下#xff1a; #include iostream class String { public:String() …本节介绍c的移动语义与新特性std::move本节介绍的内容主要用在性能优化上。 c移动语义和c左值右值的内容相关联可以先看之前发的左值右值内容。 不使用移动语义的代码如下 #include iostream class String { public:String() default;String(const char* date){std::cout Created!\n;m_Data new char[strlen(date)1];m_Size strlen(date);memcpy(m_Data, date, m_Size1);}String(const String other){std::cout Copityed!\n;m_Data new char[other.m_Size 1]; //需要在堆上分配所以会影响性能移动语义可以不在堆上进行分配m_Size other.m_Size;memcpy(m_Data, other.m_Data, m_Size 1);}~String(){delete[] m_Data;}void PrintString(){for (int i 0; i m_Size; i){std::cout m_Data[i];}std::cout \n;} private:char* m_Data;uint32_t m_Size; }; class Entity { public:Entity(const String name):m_Name(name){}void Print(){m_Name.PrintString();} private:String m_Name; };int main() {Entity entity(String(pcop));entity.Print();std::cin.get(); } 上述代码执行结果如下 Created! Copityed! pcop 可以看到执行了两次内存分配一次是在Created中一次是在Copityed中因为String(pcop)先创建了一个String对象然后通过引用的方式传递给EntityEntity调用复制构造函数在复制构造函数中新建一个String对象m_Data。 使用移动语义可以减去String(pcop)创建String对象这一次内存分配代码如下 #include iostream class String { public:String() default;String(const char* date){std::cout Created!\n;m_Data new char[strlen(date)1];m_Size strlen(date);memcpy(m_Data, date, m_Size1);}String(const String other){std::cout Copityed!\n;m_Data new char[other.m_Size 1]; //需要在堆上分配所以会影响性能移动语义可以不在堆上进行分配m_Size other.m_Size;memcpy(m_Data, other.m_Data, m_Size 1);}String(String other) noexcept //传递的是一个右值临时值{std::cout Moved!\n;m_Data other.m_Data; //实际进行了一次浅拷贝m_Data指针指向other.m_Data所指的内存地址m_Size other.m_Size;other.m_Size 0;other.m_Data nullptr;}~String(){std::cout Destroyed!\n;delete[] m_Data;}void PrintString(){for (int i 0; i m_Size; i){std::cout m_Data[i];}std::cout \n;} private:char* m_Data;uint32_t m_Size; }; class Entity { public:Entity(const String name):m_Name(name){}Entity(String name):m_Name((String)name) {}void Print(){m_Name.PrintString();} private:String m_Name; };int main() {Entity entity(String(pcop));entity.Print();std::cin.get(); } std::move的使用方式及移动赋值运算符代码如下 #include iostream class String { public:String() default;String(const char* date){std::cout Created!\n;m_Data new char[strlen(date)1];m_Size strlen(date);memcpy(m_Data, date, m_Size1);}String(const String other){std::cout Copityed!\n;m_Data new char[other.m_Size 1]; //需要在堆上分配所以会影响性能移动语义可以不在堆上进行分配m_Size other.m_Size;memcpy(m_Data, other.m_Data, m_Size 1);}String(String other) noexcept //传递的是一个右值临时值{std::cout Moved!\n;m_Data other.m_Data; //实际进行了一次浅拷贝m_Data指针指向other.m_Data所指的内存地址m_Size other.m_Size;other.m_Size 0;other.m_Data nullptr;}String operator(String other) noexcept{std::cout Moved!\n;if (this ! other){delete[] m_Data;m_Data other.m_Data; //实际进行了一次浅拷贝m_Data指针指向other.m_Data所指的内存地址m_Size other.m_Size;other.m_Size 0;other.m_Data nullptr;}return *this;}~String(){std::cout Destroyed!\n;delete[] m_Data;}void PrintString(){for (int i 0; i m_Size; i){std::cout m_Data[i];}std::cout \n;} private:char* m_Data;uint32_t m_Size; }; class Entity { public:Entity(const String name):m_Name(name){}Entity(String name):m_Name(std::move(name)) {}void Print(){m_Name.PrintString();} private:String m_Name; };int main() {//Entity entity(String(pcop));//entity.Print();String s1 pcop;//String s2 std::move(s1); //使用move将s1转换成临时变量此时调用的是构造函数而不是移动赋值运算符String s3;s3 std::move(s1); //此时调用的是移动赋值运算符s3.PrintString();std::cin.get(); }
http://www.pierceye.com/news/699862/

相关文章:

  • 淘宝网站c 设计怎么做安卓手机做网站
  • 嘉兴做网站建设的公司电商网名大全
  • 欢迎访问中国建设银行网站密码重置wordpress wp_parse_args
  • 普通电脑可以做网站服务器吗找人做网站需要什么条件
  • 长沙公司网站的建设网站图片尺寸
  • 高端网站定制费用是多少php网站建设制作
  • 广州营销型网站建设费用wordpress最新版下载
  • 洛阳网站设计公司xiamiplayer for wordpress
  • 做网站模版形象墙logo墙设计图
  • 视频网站怎么做防盗链好的装修效果图网站
  • 个人音乐分享网站源码移动网站建设的前景
  • 谷歌自建站和优化网站有很多304状态码
  • 甘肃 网站建设高端品牌护肤品
  • 南昌网站建设公司哪家好导航类网站怎么做
  • 织梦如何做汽车贸易网站wordpress调用主站的文章
  • 软件公司网站模板下载上海史特网站建设
  • 辽宁省锦州市住房与城乡建设厅网站网站的建设特色
  • 笨鸟网站开发如何做vip微信电影网站
  • 网站正在建设中图片南召seo快速排名价格
  • 网站怎么上线东莞网站seo优化托管
  • 网站建设免费的服务器关键词云图
  • 深圳网站建设哪家便宜彩票网站怎么做推广
  • 阿凡达网站建设西安免费做网站公司
  • 佛山的网站建设公司打鱼网站开发
  • 洛阳外贸网站推广easyui 网站设计
  • 租赁网站空间东营市建设
  • 网络课程网站模板wordpress 编辑器 插件
  • 绝对大气漂亮的响应式网站后台模板什么是网络营销与概念
  • 网站搜索功能模块wordpress 搜索模版
  • 怎么可以创建网站体育设施建设网站