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

国家建设部标准官方网站wordpress主题大全

国家建设部标准官方网站,wordpress主题大全,替换wordpress管理路径,威宁做网站移动语义 C11中提供了一个新特性-移动语义,使用std::move实现,用法为 std::move MyClass A; MyClass B std::move(A);移动语义的意义是当一个临时变量生命周期要结束了,但是需要使用其初始化另外一个变量,例如函数的返回值&am…

移动语义

C++11中提供了一个新特性-移动语义,使用std::move实现,用法为

std::move

MyClass A;
MyClass B = std::move(A);

移动语义的意义是当一个临时变量生命周期要结束了,但是需要使用其初始化另外一个变量,例如函数的返回值(非指针),就是一个临时变量。我们知道,使用一个类去初始化另外一个类可以使用拷贝的方式,即调用类的拷贝构造函数或赋值运算符函数,为了防止类中内容出现指针悬垂情况,类的拷贝构造和赋值运算符都会写成深拷贝的模式,即需要重新申请一块内存再将数据存放进去。而移动语义则是直接占为己有,即把数据直接转移到另一个实例化的类中,避免了拷贝带来的性能花销。std::move函数的用处就是告诉编译器,这个对象已经不需要了,可以直接转给别的类使用。
下面展示一个例子:

#include <iostream>
#include <vector>using namespace std;
class MyClass
{
public:MyClass(const char* _name) {id = 0;name = new char[256];memset(name, 0, 256);strcpy_s(this->name, 256, _name);cout << "Call Constructor, name address = " << static_cast<void*>(name) << endl;}MyClass(const MyClass& other) {if (this->name)delete this->name;this->name = new char[256];memset(this->name, 0, 256);strcpy_s(this->name, 256, other.name);this->id = other.id;cout << "Call Copy Constructor, name address = " << static_cast<void*>(name) << endl;}~MyClass() {cout << "Call Destructor, name address = " << static_cast<void*>(name) << endl;if (name)delete[] name;}private:int id;char* name = nullptr;
};MyClass func()
{return MyClass("aaa");
}int main()
{MyClass a = move(func());MyClass b = func();
}

运行这段代码会发现拷贝构造函数被调用了,原因是因为类中没有定义移动构造函数,编译器只能去调用拷贝构造函数。

移动构造函数

下面就来实现移动拷贝构造函数。为了实现移动语义,C++11新增了一个新特性,叫做右值引用,使用双&定义。单一&定义的是左值引用。

int a = 0;
int& b = a;	// 左值引用
int&& c;	// 右值引用

让编译器将一个变量匹配成右值引用的情况有两个

  1. 一个在执行语句后就会被释放的临时变量
  2. 使用std::move标记的变量

将变量匹配成右值引用是实现移动语义的基础

实现移动构造函数的思路就是移动语义的含义,直接将另一个类的数据内存直接接管,同时还需要注意一个重点,就是把传入对象的数据清除。
移动构造函数的参数就是上述说的右值引用,在上述类中添加上移动构造函数:

// 实现深拷贝类
class MyClass
{
public:MyClass(const char* _name) {id = 0;name = new char[256];memset(name, 0, 256);strcpy_s(this->name, 256, _name);cout << "Call Constructor, name address = " << static_cast<void*>(name) << endl;}MyClass(const MyClass& other) {if (this->name)delete this->name;this->name = new char[256];memset(this->name, 0, 256);strcpy_s(this->name, 256, other.name);this->id = other.id;cout << "Call Copy Constructor, name address = " << static_cast<void*>(name) << endl;}// 移动构造函数MyClass(MyClass&& other) noexcept {this->id = move(other.id);// 直接移动this->name = other.name;// move对原始指针没用,直接接管即可other.name = nullptr;cout << "Call Move Constructor, name address = " << static_cast<void*>(name) << endl;}MyClass& operator=(const MyClass& other) {if (this != &other){if (this->name)delete this	->name;this->name = new char[256];memset(this->name, 0, 256);strcpy_s(this->name, 256, other.name);this->id = other.id;}cout << "Call operator, name address = " << static_cast<void*>(name) << endl;return *this;}~MyClass() {cout << "Call Destructor, name address = " << static_cast<void*>(name) << endl;if (name)delete[] name;}private:int id;char* name = nullptr;
};

总结

当出现一些只为了提供给另外一个类实例化的变量时,例如函数返回临时变量或是将一个实例化的类push_back到vector中而无其他用处,就可以使用移动语义的方式,以减少程序运行时出现的拷贝,减少性能消耗。


文章转载自:

http://H3H5bTkZ.cwrpd.cn
http://x3RuR1ff.cwrpd.cn
http://iyQtizPF.cwrpd.cn
http://v7knWBxQ.cwrpd.cn
http://aCtml108.cwrpd.cn
http://V2sXieih.cwrpd.cn
http://ss8zh5b4.cwrpd.cn
http://92MeXrt5.cwrpd.cn
http://fwvJHxUZ.cwrpd.cn
http://kD6MfMiB.cwrpd.cn
http://rDoghQKL.cwrpd.cn
http://72Bc8saS.cwrpd.cn
http://aEOcusLU.cwrpd.cn
http://nQYby5O9.cwrpd.cn
http://qbJVj7TP.cwrpd.cn
http://I9aLkoxf.cwrpd.cn
http://AFCszQlq.cwrpd.cn
http://MBoFph7C.cwrpd.cn
http://cwN8oaa2.cwrpd.cn
http://S4MZtIHd.cwrpd.cn
http://Uapjw7Rv.cwrpd.cn
http://eoBMrYiT.cwrpd.cn
http://LMHdAkEU.cwrpd.cn
http://3GrGPWU6.cwrpd.cn
http://oktGYn73.cwrpd.cn
http://jOuPhA1z.cwrpd.cn
http://CcS0dEMQ.cwrpd.cn
http://ccc33Jyo.cwrpd.cn
http://djOGSC8f.cwrpd.cn
http://yVMNjTG3.cwrpd.cn
http://www.dtcms.com/wzjs/754549.html

相关文章:

  • wordpress不用ftpwin10优化大师免费版
  • 昆明 五华 网站建设东莞今天最新消息新闻
  • vue cms 网站开发静态网页制作实验报告
  • 简单个人网站制作流程seo学徒
  • wap网站前景怎么根据街景图片找地址
  • 一般做海报的图片跟哪个网站下载抖音营销软件
  • 微信怎么制作微电影网站郑州模板网站建设
  • 分析可口可乐网站建设的目的网站开发与推广方向
  • 站长工具是做什么的ico在线制作网站
  • 快刷网站做个企业网站
  • 做的网站一定要收录么大学专业分类目录
  • 郑州网站优化公司机票网站开发知乎
  • 天津高端网站建设案例wordpress硬件条件
  • 建设银行联号查询网站安全员考试成绩查询网
  • 哪里创建免费个人网站网站集约化建设要求
  • 做平台好还是自己建网站jsp怎样做网站
  • 网站只做静态页面安全受到影响建设网站素材
  • 动态公司网站设计简约商务ppt模板免费下载
  • 亚马逊deal网站怎么做哪个网站可以在线做高考题
  • 文明网站建设wordpress推送百度
  • 哪家做网站公司好wordpress设置教程
  • 网站负责人 备案在线网站建设询问报价
  • html仿淘宝首页电子商务网站首页做网站 空间
  • 汉中做网站的电话网站seo在线检测
  • 做类似于58同城的网站莆田网站制作企业
  • 河南双师培训网站怎么打开wordpress后台
  • 无为县做互联网网站免费个人域名网站
  • 后台控制网站关键词设置的详细代码沈阳网站建设求职简历
  • 响应式网站建设报价单网站建设对企业品牌价值提升的影响
  • 企业网站视频栏目建设方案百度云服务器一年多少钱