Здравствуйте, rg45, Вы писали:
R>А как это можно гарантировать? Как минимум, он всегда будет доступен для разработчика, который выполняет операцию перемещения и для того, кто будет этот код сопровождать.
В векторе после ::resize объекты старого блока гарантированно недоступны для пользователя вектора.
При возврате поля объекта старое поле гарантированно недоступно для пользователя.
R>И второй вопрос: а что с текущей концепцией перемещения — перемещающие конструкторы, операторы присваивания, rvalue ссылки и пр. — что-то из этого остается или все упраздняется?
Ну std::move придётся оставить, конечно, чтоб эффективно вытащить элемент из вектора, например.
R>>А как это можно гарантировать? Как минимум, он всегда будет доступен для разработчика, который выполняет операцию перемещения и для того, кто будет этот код сопровождать.
TB>В векторе после ::resize объекты старого блока гарантированно недоступны для пользователя вектора. TB>При возврате поля объекта старое поле гарантированно недоступно для пользователя.
Ты пишешь очевидные вещи, но только про пользователя. А что на счет разработков, которые будут поддерживать ::resize ?
TB>Ну std::move придётся оставить, конечно, чтоб эффективно вытащить элемент из вектора, например.
Не уверен, что правильно понял сценарий использования — эта операцию для кого доступна — для всех пользователей, или только для разработчиков вектора?
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, rg45, Вы писали:
R>Такое возможно будет, или нужно будет тоже запрещать?
Да, почему нет?
R>Ты пишешь очевидные вещи, но только про пользователя. А что на счет разработков, которые будут поддерживать ::resize ?
Люди, что пишут кишки контейнера, изначально понимают, что им приходится самим вручную управлять временем жизни объектов.
R>Не уверен, что правильно понял сценарий использования — эта операцию для кого доступна — для всех пользователей, или только для разработчиков вектора?
Я про такую ситуацию
std::vector<std::string> V("stroka", 6);
std::string S = std::move(V[4]);
После этого V[4] остаётся доступен пользователю и конечно, его надо сохранить в валидном состоянии.
Впрочем, даже мув-конструктор явно лишний. Побитовое копирование из старого в новый, а в старом вызвать конструктор-по-умолчанию. Я не видел сценариев, где реально требуется что-то более сложное. Но вручную писать мув-конструктор всё равно надо. Бесит.
Если же такого конструктора нет, то не разрешать такое.