История изменений
Исправление dissident, (текущая версия) :
Я собственно, это и справшивал и на это и получил ответ.
The least guarantee provides the no move safety. The moved from object isn’t valid anymore. You can only call its destructor or assign it a new value.
(c) https://foonathan.net/blog/2016/07/23/move-safety.html
Меня заинтересовало:
- то, что передача параметра через T&& вовсе не вызывает move конструктора как я думал раньше
- язык не гарантирует ничего из декларации T&&, поэтому для sink лучше ее не использовать (а использовать unique_ptr<T> а не unique_ptr<T>&& как предлагает Meyers), под «не гарантирует ничего» я имею ввиду, что конструкция fun(T&&) и даже fun(unique_ptr<T>&&) сама по себе ownership не забирает
- Нигде никто никому не обещает, что move contrustor (из-за бага в себе например), не приведет объект к виду не «destructible» - вызов деструктора может привести к crash, resource leak, UB, если move constructor не написан правильно (то, что я сделал сознательно приписывая указателю мусор, но это же может произойти по ошибке
- Слова «И таки да, move constructor не имеет никаких обязательств по отношению к переданному в него объекту - может оставить как есть, может перевести его в неюзабельное состояние, может сделать что-то среднее. В общем, может сделать все, что может обычная функция сделать с переданным в нее rvalue.» означают, что язык не представляет никакого механизма, а то, что move constructor оставит объект в состоянии уничтожабельном - просто здравый смысл
Собственно все. Я узнал что-то новое. Или Вы тот же анонимус, который троллил про UB при арифметике указателей над непроинизиализированной выровненной памятью, получаемой при помощи operator new()? Если да, то виртуально съедаю свою кепку второй раз. За то, что провоцируюсь на бессмысленный разговор ни о чем.
Исходная версия dissident, :
Я собственно, это и справшивал и на это и получил ответ.
The least guarantee provides the no move safety. The moved from object isn’t valid anymore. You can only call its destructor or assign it a new value.
(c) https://foonathan.net/blog/2016/07/23/move-safety.html
Меня заинтересовало:
- то, что передача параметра через T&& вовсе не вызывает move конструктора как я думал раньше
- язык не гарантирует ничего из декларации T&&, поэтому для sink лучше ее не использовать (а использовать unique_ptr<T> а не unique_ptr<T>&& как предлагает Meyers), под «не гарантирует ничего» я имею ввиду, что конструкция fun(T&&) и даже fun(unique_ptr<T>&&) сама по себе ownership не забирает
- Нигде никто не кому не обещает, что move contrustor (из-за бага в себе например), не приведет объект к виду не «destructible» - вызов деструктора может привести к crash, resource leak, UB, если move constructor не написан правильно (то, что я сделал сознательно приписывая указателю мусор, но это же может произойти по ошибке
- Слова «И таки да, move constructor не имеет никаких обязательств по отношению к переданному в него объекту - может оставить как есть, может перевести его в неюзабельное состояние, может сделать что-то среднее. В общем, может сделать все, что может обычная функция сделать с переданным в нее rvalue.» означают, что язык не представляет никакого механизма, а то, что move constructor оставит объект в состоянии уничтожабельном - просто здравый смысл
Собственно все. Я узнал что-то новое. Или Вы тот же анонимус, который троллил про UB при арифметике указателей над непроинизиализированной выровненной памятью, получаемой при помощи operator new()? Если да, то виртуально съедаю свою кепку второй раз. За то, что провоцируюсь не бессмысленный разговор ни о чем.