这就是我所拥有的:
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的移动和移动赋值构造函数被正确调用)但B的所有者不会改变(我希望它在我们交换后改为a2)。
为什么不在这里调用B的移动构造函数/移动赋值构造函数? 提前谢谢!
答案 0 :(得分:0)
因为字段object
被移动(复制)为指针。
答案 1 :(得分:0)
B的移动构造函数未被调用,因为您正在移动B *(指向B的指针),而不是B.尝试将对象定义为B的实例。