Получает ли C++26 деструктивную семантику перемещения?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Получает ли C++26 деструктивную семантику перемещения?

Сообщение Anonymous »

Могу ли я выразить функцию, которая использует объект? Означает ли это, что его деструктор не запускается на перемещенном объекте?
Как и предлагаемая библиотечная функция tribuly_relocate_at сама по себе?

Код: Выделить всё

template 
T* trivially_relocate_at(T* dst, T* src);
Наивно, если авторы библиотеки могут, то и я должен.
Проблема: где волшебный соус? Эта сигнатура функции не говорит о том, что она эффективно разрушает объект в src, или обратная проблема, что она эффективно создает объект в dst.
Я подозреваю, что ответ отрицательный: несколько примеров, которые я нашел, избегают этого, выполняя ручное управление памятью с помощью Place-new и std::destroy_at.
Причина вопроса: Я хотел бы предложить то, чего, кажется, не хватает: два новых квалификатора указателя выражать отдачу и принятие собственности. Если вы извините мое повторное использование ключевых слов new и delete (это не обязательно так):

Код: Выделить всё

template 
T* trivially_relocate_at(new T* dst, delete T* src);
Речь идет не об оптимизации C++, а о его спасении: чтобы иметь статический анализ времени жизни (сродни Rust) в C и/или C++, я не вижу способа добавить возможность выразить статическую передачу владения.


Подробнее здесь: https://stackoverflow.com/questions/798 ... -semantics
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»