Копирование-присваивание для класса с переменной-членом-ссылочкой - нет-нет, потому что вы не можете переназначить ссылку. Но как насчет переадресации? Я просто попробовал move
, но, конечно, это уничтожило исходный объект, когда я просто хочу переместить ссылку:
class C
{
public:
C(X& x) : x_(x) {}
C(C&& other) : x_(std::move(other.x_)) {}
C& operator=(C&& other)
{
x_ = std::move(other.x_);
}
private:
X& x_;
};
X y;
C c1(y);
X z;
C c2(z);
c2 = c1; // destroys y as well as z
Должен ли я просто не выполнять переадресацию и приклеивание только с помощью move-construction? Это затрудняет реализацию swap(C&, C&)
.