вот что я получил:Переместить семантику, почему не вызван конструктор перемещения?
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);
все меняется, это место правильно (переместить и переместить конструкторами назначения называются должным образом), но владелец B не изменился (хотя я бы хотел, чтобы он изменился на a2, поскольку мы поменялись местами).
Почему здесь нет конструктора назначения перемещения/перемещения назначения B? Спасибо заранее!