13.6.2
来源:互联网 发布:数据保护包括 编辑:程序博客网 时间:2024/06/05 17:44
13.49
StrVec(StrVec&&) NOEXCEPT;StrVec& operator=(StrVec&&) noexcept;StrVec::StrVec(StrVec &&s) noexcept : elements(s.elements), first_free(s.first_free), cap(s.cap){ s.elements = s.first_free = s.cap = nullptr;}StrVec& StrVec::operator = (StrVec &&rhs) noexcept{ if (this != &rhs) { free(); elements = rhs.elements; first_free = rhs.first_free; cap = rhs.cap; rhs.elements = rhs.first_free = rhs.cap = nullptr; } return *this;}String(String &&) noexcept;String& operator=(String&&) noexcept;String::String(String &&s) noexcept : elements(s.elements), end(s.end){ s.elements = s.end = nullptr;}String& String::operator = (String &&rhs) noexcept{ if (this != &rhs) { free(); elements = rhs.elements; end = rhs.end; rhs.elements = rhs.end = nullptr; } return *this;}Message(Message &&m); Message& operator=(Message&&); Message::Message(Message &&m) : contents(std::move(m.contents)){ move_Folders(&m);}Message& Message::operator= (Message &&rhs){ if (this != &rhs) { remove_from_Folders(); contents = std::move(rhs.contents); move_Folders(&rhs); } std::cout << "Message members moved" << std::endl; // debug return *this;}
13.50
String baz(){ String ret("world"); return ret; //1}String s5 = baz(); //2
13.51
这里会使用移动构造函数而不是拷贝构造函数。
13.52
hp=hp2; //hp2是左值,使用拷贝赋值hp=std::move(hp2); //使用移动赋值详细解释见p478
13.53
@pezy
#include <string>class HasPtr {public: friend void swap(HasPtr&, HasPtr&); HasPtr(const std::string &s = std::string()); HasPtr(const HasPtr &hp); HasPtr(HasPtr &&p) noexcept; HasPtr& operator=(HasPtr rhs); //HasPtr& operator=(const HasPtr &rhs); //HasPtr& operator=(HasPtr &&rhs) noexcept; ~HasPtr();private: std::string *ps; int i;};#include <iostream>inline void swap(HasPtr &lhs, HasPtr &rhs){ using std::swap; swap(lhs.ps, rhs.ps); swap(lhs.i, rhs.i); std::cout << "call swap" << std::endl;}HasPtr::HasPtr(const std::string &s) : ps(new std::string(s)), i(0){ std::cout << "call constructor" << std::endl;}HasPtr::HasPtr(const HasPtr &hp) : ps(new std::string(*hp.ps)), i(hp.i){ std::cout << "call copy constructor" << std::endl;}HasPtr::HasPtr(HasPtr &&p) noexcept : ps(p.ps), i(p.i){ p.ps = 0; std::cout << "call move constructor" << std::endl;}HasPtr& HasPtr::operator=(HasPtr rhs){ swap(*this, rhs); return *this;}HasPtr::~HasPtr(){ std::cout << "call destructor" << std::endl; delete ps;}int main(){ return 0;}
13.54
略
0 0
- 13.6.2
- 第十三章 13.6.2节练习
- 13.6.1
- 13.6.3
- 13.6 第十三章小结
- 13.6 正则表达式
- 13.6 Interleaving String
- 13.6 第十三章小结
- 13.6节练习
- 13.6指向类成员的指针
- 谭浩强著《C程序设计(第二版)》习题13.6
- 第十三章 13.6.1节练习
- 第十三章 13.6.3节练习
- Java编程思想13.6-正则表达式
- 13.6 2013计算机视觉代码合集一
- 13.6 绕过缓冲区高速缓存:直接I/O
- 13.6 Thread类自定义线程类
- 13.6 Swift重写指定构造方法
- CSU-1409
- TODO:当PHP遇上IIS
- SettingBar - Android自定义控件
- CSU-1410
- Spring SpringMVC 整合问题
- 13.6.2
- MSSQL 索引
- 1054. 求平均值 (20)
- CSU-1505
- java中判断一个字符串是否“都为数字”和“是否包含数字”和“截取数字”
- 最小生成树模板——Jungle Roads,Constructing Roads为例
- 1055. 集体照 (25)
- 动规-区间DP
- is 和 as