Воровство внутри конструктора перемещения

Во время реализации конструктора перемещения игрушечного класса я заметил паттерн:

array2D(array2D&& that)
{
    data_ = that.data_;
    that.data_ = 0;

    height_ = that.height_;
    that.height_ = 0;

    width_ = that.width_;
    that.width_ = 0;

    size_ = that.size_;
    that.size_ = 0;
}

Очевидно, паттерн был:

    member = that.member;
    that.member = 0;

Итак, я написал макрос препроцессора, чтобы сделать кражу менее подробным и подверженным ошибкам:

#define STEAL(member) member = that.member; that.member = 0;

Теперь реализация выглядит следующим образом:

array2D(array2D&& that)
{
    STEAL(data_);
    STEAL(height_);
    STEAL(width_);
    STEAL(size_);
}

Есть ли у этого недостатки? Есть ли более чистое решение, не требующее препроцессора?

12
задан Brian Tompsett - 汤莱恩 22 June 2016 в 08:27
поделиться