私はC++の新機能、つまりmoveコンストラクターと代入について学習しようとしていますが、興味深い例X::operator=(X&&)
を見つけまし たが、私がまったく理解していない唯一のことは、move ctorと代入演算子(以下のコードでマークされています)の1行です。
MemoryBlock(MemoryBlock&& other)
: _data(NULL)
, _length(0)
{
std::cout << "In MemoryBlock(MemoryBlock&&). length = "
<< other._length << ". Moving resource." << std::endl;
// Copy the data pointer and its length from the
// source object.
_data = other._data;
_length = other._length;
// Release the data pointer from the source object so that
// the destructor does not free the memory multiple times.
other._data = NULL;
other._length = 0;//WHY WOULD I EVEN BOTHER TO SET IT TO ZERO? IT DOESN'T MATTER IF IT'S ZERO OR ANYTHING ELSE IT IS JUST A VALUE.
}
だから私の質問は:lenght_の値をゼロに設定する必要がありますか、それともそのままにしておくことができますか?メモリリークが発生することはなく、1つの表現でafaicsが少なくなります。