Функции C ++ без деструктора

Я пишу голое металлическое приложение C ++, которое войдет в бесконечный цикл, а затем никогда не выйдет.

У меня есть несколько объектов, которые будут построены в верхней части main () и никогда не покинут область видимости. Память (как код, так и оперативная память) стоит дорого, так как у меня всего несколько килобайт для работы.

Будет ли оптимизатор вообще удалять неиспользованные деструкторы для меня? Если нет, то есть ли способ сказать компилятору не создавать никаких деструкторов по умолчанию?

Кроме того, есть ли аналогичный способ избавиться от некоторых других функций по умолчанию, которые поставляются с классами (конструктор копирования и т. Д.).

3

Решение

В C ++ 11 деструктор по умолчанию и некоторые другие функции-члены могут быть удалены. Для класса A это можно сделать с помощью.

 ~A() = delete;

Тем не менее, удаление деструктора действительно вводит некоторые ограничения на способ создания экземпляра.

Для более старых (до C ++ 11) компиляторов просто не объявляйте деструктор. Хотя компилятор обычно создает деструктор, он часто является встроенным и ничего не делает, поэтому компилятор может решить полностью исключить код.

Вам также необходимо прочитать документацию вашего компилятора (или изучить код, который он издает), чтобы понять, что он на самом деле делает. Когда дело доходит до устранения неиспользуемого кода — в том числе deleted функции-члены в C ++ 11 — вы полагаетесь на качество реализации вашего компилятора. Вы также можете обнаружить, что различные параметры оптимизации влияют на то, что он делает (например, действительно ли пустой встроенный деструктор, сгенерированный компилятором, фактически оптимизирован из-за отсутствия).

3

Другие решения

Если вы используете C ++ 11, то деструктор по умолчанию может быть удален. Проверьте код ниже:

class A
{
public:
~A() = delete;
};
1