C++拷贝构造函数和移动构造函数
2015-12-15 22:47
429 查看
#include<iostream> #include<string> using namespace std; class Animal{ public: Animal(); Animal(Animal &&animal)noexcept;//移动构造函数应该标记为不抛出异常 Animal(const Animal& animal); Animal& operator=(Animal animal);//形参不设为引用,在赋值时回调用拷贝构造函数或者移动构造函数,左值拷贝,右值移动 private: string name; int weight; }; Animal::Animal(){ name=""; weight=0; } Animal::Animal(const Animal& animal){ name=animal.name; weight=animal.weight; cout<<"Animal::Animal(Animal& animal)"<<endl; } Animal::Animal(Animal&& animal)noexcept{//noexcept说明不会抛出异常,必须和函数原型一致 name=animal.name; weight=animal.weight; cout<<"Animal::Animal(Animal&& animal)"<<endl; } Animal& Animal::operator=(Animal animal){ if(this!=&animal){ name=animal.name; weight=animal.weight; } cout<<"Animal::operator=(Animal animal)"<<endl; return *this; } int main(){ Animal bird1; Animal bird2; cout<<"左值"<<endl; bird1=bird2;//左值 cout<<"右值"<<endl; bird1=move(bird2);//右值 }
相关文章推荐
- JNI 调用第三方dll 报错 RUNTIME ERROR R6031
- C /C++标准库 - <cstdlib>(stdlib.h)
- More Effective C++ 第四部分 效率
- 【C++ STL应用与实现】1: STL概览和分类
- 递推1
- C语言笔记
- Cake
- 实战c++中的vector系列--assign() push_back() or insert()
- 实战c++中的vector系列--assign() push_back() or insert()
- c++_10: string类
- C语言之结构体和共同体——结构体的定义和使用
- 进制转换
- C++函数运算符重载
- 黑马程序员--C语言自学笔记---04分支结构
- 实战c++中的vector系列--将迭代器转换为索引
- 实战c++中的vector系列--将迭代器转换为索引
- 值得推荐的C/C++框架和库 (真的很强大)
- Ubuntu Android开发:缺少libstdc++.so.6和libz.so.1文件
- C++能设计实现一个不能被继承的类吗
- 实战c++中的vector系列--构造、operator=和assign区别