Re[5]: Exception-safe vector
От: T4r4sB Россия  
Дата: 23.12.22 09:56
Оценка:
Здравствуйте, rg45, Вы писали:

R>А как это можно гарантировать? Как минимум, он всегда будет доступен для разработчика, который выполняет операцию перемещения и для того, кто будет этот код сопровождать.


В векторе после ::resize объекты старого блока гарантированно недоступны для пользователя вектора.
При возврате поля объекта старое поле гарантированно недоступно для пользователя.

R>И второй вопрос: а что с текущей концепцией перемещения — перемещающие конструкторы, операторы присваивания, rvalue ссылки и пр. — что-то из этого остается или все упраздняется?


Ну std::move придётся оставить, конечно, чтоб эффективно вытащить элемент из вектора, например.
Re[4]: Exception-safe vector
От: rg45 СССР  
Дата: 23.12.22 09:57
Оценка:
Здравствуйте, T4r4sB, Вы писали:

TB>Везде, где можно гарантировать, что старый объект не будет доступен.


Еще вопросик: как в предлагаемом тобой подходе будет выглядеть такой код:

A a;
foo(std::move(a));


Такое возможно будет, или нужно будет тоже запрещать?
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[6]: Exception-safe vector
От: rg45 СССР  
Дата: 23.12.22 10:01
Оценка:
Здравствуйте, T4r4sB, Вы писали:


R>>А как это можно гарантировать? Как минимум, он всегда будет доступен для разработчика, который выполняет операцию перемещения и для того, кто будет этот код сопровождать.


TB>В векторе после ::resize объекты старого блока гарантированно недоступны для пользователя вектора.

TB>При возврате поля объекта старое поле гарантированно недоступно для пользователя.

Ты пишешь очевидные вещи, но только про пользователя. А что на счет разработков, которые будут поддерживать ::resize ?

TB>Ну std::move придётся оставить, конечно, чтоб эффективно вытащить элемент из вектора, например.


Не уверен, что правильно понял сценарий использования — эта операцию для кого доступна — для всех пользователей, или только для разработчиков вектора?
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[5]: Exception-safe vector
От: T4r4sB Россия  
Дата: 23.12.22 12:11
Оценка:
Здравствуйте, rg45, Вы писали:

R>Такое возможно будет, или нужно будет тоже запрещать?


Да, почему нет?

R>Ты пишешь очевидные вещи, но только про пользователя. А что на счет разработков, которые будут поддерживать ::resize ?


Люди, что пишут кишки контейнера, изначально понимают, что им приходится самим вручную управлять временем жизни объектов.

R>Не уверен, что правильно понял сценарий использования — эта операцию для кого доступна — для всех пользователей, или только для разработчиков вектора?


Я про такую ситуацию
std::vector<std::string> V("stroka", 6);
std::string S = std::move(V[4]);

После этого V[4] остаётся доступен пользователю и конечно, его надо сохранить в валидном состоянии.

Впрочем, даже мув-конструктор явно лишний. Побитовое копирование из старого в новый, а в старом вызвать конструктор-по-умолчанию. Я не видел сценариев, где реально требуется что-то более сложное. Но вручную писать мув-конструктор всё равно надо. Бесит.
Если же такого конструктора нет, то не разрешать такое.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.