【发布时间】:2013-11-07 19:51:16
【问题描述】:
这是我得到的:
class A {
class B{
A* owner;
B(A* owner){
this->owner = owner;
}
B(B&& second)
: owner(std::move(second.owner));
{}
B& operator=(B&& second){
this->owner = second.owner;
}
};
B* object;
int a;
string b;
A(int a, string b){
this->a = a;
this->b = b;
object = nullptr;
}
void create_B(){
if(object == nullptr)
object = new B(this);
}
A& operator=(A&& second){
this->a = second.a;
this->b = second.b;
this->object = std::move(second.object);
second.object = nullptr;
return *this;
}
A(A&& second)
: a(second.a)
, b(second.b)
, object(std::move(second.object)){
second.object = nullptr;
}
};
现在困扰我的是,当我做这样的事情时:
A a1(2, "aaa"), a2(3, "bbb");
a1.create_B();
swap(a1, a2);
一切都改变了它的位置(A 的 move 和 move 赋值构造函数被正确调用)但 B 的所有者没有改变(虽然我们交换后我希望它更改为 a2)。
为什么这里不调用B的移动构造函数/移动赋值构造函数? 提前致谢!
【问题讨论】:
标签: c++ move-semantics