Rup*_*av. 4 c++ move move-semantics c++11 move-assignment-operator
我只是初学者在c ++ 11中的移动操作,所以玩它.但发现了一些我无法理解的东西.
#include <iostream>
using namespace std;
class A{
public:
A(){cout << "default ctor" << endl;}
A(const string& str):_str{str}{cout << "parameter ctor" << endl;}
A(A&& obj):_str{std::move(obj._str)}{cout << "move ctor" << endl;}
A& operator =(A&& rhs){_str = std::move(rhs._str);cout << "move assignment operation" << endl; return *this;}
void print(){cout << _str << endl;}
private:
string _str;
};
int main(){
A a("rupesh yadav"); // parameter ctor
A b(std::move(a)); // move ctor
cout << "print a: ";
a.print(); // NOT printing --> CORRECT!!
cout << "print b: ";
b.print(); // printing --> CORRECT!!
b = std::move(a); // i don't know may be silly but still lets do it WHY NOT!!!, could be just mistake??
cout << "print a: ";
a.print(); // printing --> WRONG!!
cout << "print b: ";
b.print(); // NOT printing --> WRONG!!
}
Run Code Online (Sandbox Code Playgroud)
我期待该b = std::move(a)操作会表现不同的东西,因为我申请对象移动一个第二时间,但它是复制左侧对象b到右侧对象一个,这部分我不明白.
或者我在编程方面做错了.如果我在移动操作中做错了,请帮忙.
编辑:我知道这是未定义的行为.我怀疑的是,如果我再次这样做,那么它是从对象a复制到对象b,如果我再次做同样的事情,那么将对象b复制到对象a?
因此,它是从左到右,从右到左复制形式为什么?
您不能两次从同一个对象移动.
当您第一次移动a到b,a有一个"有效的,但不确定状态"(不记得确切的术语).然后,你试图再次a进入!现在所有的一切都已经破裂了.(我怀疑,在内部,数据指针刚刚交换过.)b
根本不要这样做.我认为没理由这么做.
| 归档时间: |
|
| 查看次数: |
959 次 |
| 最近记录: |