Почему косяк это просто быть по тому же адресу и не копируются
Это на самом деле то, что движение семантики обычно делает. Он часто хранит ресурс (часто память, но может быть файловым дескриптором и т. Д.) В одном и том же состоянии, но он обновляет ссылки в объектах.
Представьте себе два вектора, src
и dest
. Вектор src
содержит большой блок данных, который выделяется в куче, а dest
пуст. Когда src
перемещен на dest
, все, что происходит, это то, что dest
обновляется, чтобы указать на блок памяти на куче, тогда как src
обновлен, чтобы указать на то, что dest
указывало на, в данном случае, ничего.
Почему это полезно? Потому что это означает, что vector
можно записать с уверенностью, что только один вектор будет указывать на блок памяти, который он выделяет. Это означает, что деструктор может гарантировать, что он очистит выделенную память.
Это может быть расширено для объектов, которые управляют другими ресурсами, такими как дескрипторы файлов. Теперь можно писать объекты, которым может принадлежать дескриптор файла. Эти объекты могут перемещаться, но не копироваться. Поскольку контейнеры STL поддерживают подвижные объекты, они могут быть помещены в контейнеры намного проще, чем в C++ 03. Они могут обрабатывать дескриптор или другой ресурс только по ссылке на него, и деструктор может закрыть его соответствующим образом.
очень хорошее чтение для меня http://thbecker.net/articles/rvalue_references/section_01.html –