The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск языка программирования Rust 1.50"
Отправлено Ordu, 12-Фев-21 23:24 
> Может это хоть как-то поможет:

Ты тоже почитал ответы Школьника и Манянима?

Нет, не поможет. Тут проскакивали ссылки на copy_elision, сходи и почитай, там описывается откуда берётся это поведение, при котором деструктор вызывается не на значение, а на область памяти содержащее это значение.

Я так подумал, о том что происходит в голове у того анонима выше, и почему ему до сих пор кажется, что я чего-то не понимаю, и у меня возникло предположение. И думаю, что у тебя происходит то же самое, что и у него. Вы не различаете достаточно точно переменную и её значение. Или кусок памяти, и значение хранящееся в нём. Ты знаешь разницу между указателем и адресом? Вот здесь примерно то же самое. Когда выполняется присваивание, одно из значений (которое в данном случае является инстансом класса, или объектом) исчезает. Оно превращается в тепловую энтропию. Это как здесь:

int a = 2;
a = 7;

После a = 7 значение 2 исчезло и превратилось в термодинамическую энтропию, процессор стал чуть теплее. Так и в том примере моём присваивание уничтожило старый объект (старое значение переменной). Память, которая содержала тот объект осталась, и в ней теперь хранится новый объект, а старый прекратил существование. Но деструктор старого объекта будет вызван тогда, когда лайфтайм куска памяти/переменной закончится.

То есть, дефолтный operator= реализован с нарушением семантики C в пользу каких-то там оптимизаций. Это называется Copy Elision. Ссылки ты можешь найти в этом обсуждении. Нарушения этой семантики не проявляют себя, если дефолтного деструктора достаточно. Если же деструктор кастомный, то чтобы получить семантику C, которая проводит чёткую границу между значением и памятью, надо реализовывать ещё и свой operator=.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру