Дополнение к Никосу С. ответ:
Обмен - не единственное решение, но оно довольно элегантное: вы сохраняете память целевой строки для повторного использования в исходной строке. Пока все в порядке, вы можете захотеть начать заново с пустой строкой после перемещения. Опять же, вы не должны удалять память, она отлично подходит для повторного использования. Итак, вы просто установите длину равной 0.
Однако тогда вам нужно будет отдельно запомнить, сколько символов еще уместилось в памяти. Но это все равно полезно. Подумайте, хотите ли вы перераспределять память строки каждый раз, когда вы добавляете один символ?
Скорее всего, нет. Таким образом, вы должны добавить дополнительную память (например, удвоить емкость, если у вас закончится память). Все вместе:
class MyString
{
size_t length;
size_t capacity;
char* data;
public:
MyString& operator=(MyString&& other)
{
if(&other != this)
{
std::swap(data, other.data); // as in Nikos' answer
std::swap(capacity, other.capacity);
length = other.length;
other.length = 0; // restart with empty string
// still you have quite a bit of
// memory already reserved
}
return *this;
}
};
Имейте в виду, что это необязательно, и на самом деле вы можете заставить людей платить за то, что им может не понадобиться - если они не будут повторно использовать перемещенный объект ...
person
Aconcagua
schedule
10.06.2019
MyString
. - person alter igel   schedule 11.06.2019