Почему деструктор должен быть доступен, даже если он не вызывается?C++

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

Сообщение Anonymous »

Имея класс X, следующая инициализация объекта:

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

new (ptr) X(X());
требуется доступный деструктор, начиная с C++17. Почему это происходит, когда объект инициализируется конструктором по умолчанию непосредственно в хранилище, на которое указывает ptr, поэтому не нужно использовать временный объект?
Пример кода:

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

struct X {
X() { }
X(const X&) = delete;
X(X&&) = delete;
~X() = delete;  // or, e.g, private
};

void test(void* ptr) {
new (ptr) X(X());  // error: attempt to use a deleted function
}
Демо: https://godbolt.org/z/Khac1z8r3
ОБНОВЛЕНИЕ
Это аналогичный вопрос: почему публичный деструктор необходим для обязательного RVO в C++?. Но мой случай другой, поскольку в моем коде проблема потенциальных вызовов деструктора из-за исключений не возникает (или, по крайней мере, я ее там не вижу).

Подробнее здесь: https://stackoverflow.com/questions/787 ... not-called
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Деструктор PyBind11 не вызывается?
    Anonymous » » в форуме C++
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Почему деструктор удаления вектора вызывается в результате скалярного удаления?
    Гость » » в форуме C++
    0 Ответы
    90 Просмотры
    Последнее сообщение Гость
  • Почему деструктор глобального объекта вызывается дважды после инициализации ссылки на него?
    Anonymous » » в форуме C++
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Почему деструктор глобального объекта вызывается дважды после инициализации ссылки на него?
    Anonymous » » в форуме C++
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Почему деструктор здесь вызывается дважды?
    Anonymous » » в форуме C++
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

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