Я пытаюсь узнать о новой функции C++, а именно о перемещении конструктора и назначении X::operator=(X&&)
, и я нашел интересный пример, но единственное, что я даже не понимаю, но больше не согласен, это одна строка в операторе перемещения и присваивания (отмечено в коде ниже):
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.
}
Итак, мой вопрос: мне нужно установить значение length_ равным нулю или я могу оставить его нетронутым? Не будет утечки памяти и на одно выражение меньше афаиков.
other.data = NULL
"освобождает", это больше похоже на "отключение", память не освобождается. Кроме того, вы должны использовать 'nullptr', а не 'NULL', примерно то же самое, но 'nullptr' правильнее C++. Также рекомендуется избегать использованияstd::endl
, это останавливает вашу программу, ожидая сброса вывода. Если вам не нужна эта функциональность, предпочтите"\n"
. - person thecoshman   schedule 02.07.2013