下载此文档

移动构造函数.doc


文档分类:高等教育 | 页数:约1页 举报非法文档有奖
1/1
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/1 下载此文档
文档列表 文档介绍
移动构造函数
C++中对象发生拷贝的场景可以分为两种,一种是被拷贝的对象还要继续使用,另一种是被拷贝的对象不再使用;第二种一般可以认为是对右值的拷贝,也就是一个临时对象;
C++11中引入了移动构造函数,对象发生拷贝时不需要重新分配空间移动构造函数
C++中对象发生拷贝的场景可以分为两种,一种是被拷贝的对象还要继续使用,另一种是被拷贝的对象不再使用;第二种一般可以认为是对右值的拷贝,也就是一个临时对象;
C++11中引入了移动构造函数,对象发生拷贝时不需要重新分配空间而是使用被拷贝对象的内存,即临时对象的内存,从而提高代码运行效率(作用);
classHasPtrMem
{
public:
HasPtrMem():d(newint(3))
{
cout<<"Construct:"<<++n_cstr<<endl;
}
HasPtrMem(constHasPtrMem&h):dn(ewint(*))
{
cout<<"Copyconstruct:"<<++n_cptr<<endl;
}
HasPtrMem(HasPtrMem&&h):d()//移动构造函数
{
=nullptr;//将临时值的指针成员置空
cout<<"Moveconstruct:"<<++n_mvtr<<endl;
}
~HasPtrMem()
{
deleted;
cout<<"Destruct:"<<++n_dstr<<endl;
}
int*d;
staticintn_cstr;
staticintn_dstr;
staticintn_cptr;
staticintn_mvtr;
};
上例中的HasPtrMem(HasPtrMem&&)就是所谓的移动构造函数。与拷贝构造函数不同的是,移动构造函数接受一个所谓的“右值引用啲参数。可以看到,移动构造函数使用了参数h的成员d初始化了本对象的成员d(而不是像拷贝构造函数一样需要分配内存,然后将内容依次拷贝到新分配的内存中),而h的成员d随后被置为指针空值nullptr,这就完成了移动构造的全过程。

移动构造函数 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数1
  • 收藏数0 收藏
  • 顶次数0
  • 上传人小s
  • 文件大小25 KB
  • 时间2022-06-10
最近更新