Сообщение Re[4]: валидность итератора при move контейнера от 26.02.2019 16:06
Изменено 26.02.2019 16:07 niXman
Re[4]: валидность итератора при move контейнера
Здравствуйте, andrey.desman, Вы писали:
AD>То есть, итератор не может ссылаться на внутренние данные объекта.
да, иначе он станет невалидным.
AD>Например, std::string с фиксированным in-place буфером.
AD>Но для std::string и нет гарантий переезда итераторов после move.
я никогда не задумывался об этом, но да, in-place буфер получается автоматический массив член класса, и если std::string создан на стеке — его не перенести. и если std::string создан в куче — его тоже не перенести, ибо в С++ нет возможности по адресу память понять, это стек или куча...
AD>То есть, итератор не может ссылаться на внутренние данные объекта.
да, иначе он станет невалидным.
AD>Например, std::string с фиксированным in-place буфером.
AD>Но для std::string и нет гарантий переезда итераторов после move.
я никогда не задумывался об этом, но да, in-place буфер получается автоматический массив член класса, и если std::string создан на стеке — его не перенести. и если std::string создан в куче — его тоже не перенести, ибо в С++ нет возможности по адресу память понять, это стек или куча...
Re[4]: валидность итератора при move контейнера
Здравствуйте, andrey.desman, Вы писали:
AD>То есть, итератор не может ссылаться на внутренние данные объекта.
да, иначе он станет невалидным.
AD>Например, std::string с фиксированным in-place буфером.
AD>Но для std::string и нет гарантий переезда итераторов после move.
я никогда не задумывался об этом, но да, in-place буфер получается автоматический массив член класса, и если std::string создан на стеке — его не перенести. но даже если std::string создан в куче — его тоже не перенести, ибо в С++ нет возможности по адресу память понять, это стек или куча...
AD>То есть, итератор не может ссылаться на внутренние данные объекта.
да, иначе он станет невалидным.
AD>Например, std::string с фиксированным in-place буфером.
AD>Но для std::string и нет гарантий переезда итераторов после move.
я никогда не задумывался об этом, но да, in-place буфер получается автоматический массив член класса, и если std::string создан на стеке — его не перенести. но даже если std::string создан в куче — его тоже не перенести, ибо в С++ нет возможности по адресу память понять, это стек или куча...