C ++ Отключить деструкторы для статических переменныхC++

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

Сообщение Anonymous »

У меня есть класс общего назначения, который используется в разных контекстах - иногда как
static переменная, а иногда в качестве обычной переменной в стеке /кучах. Исполняемый файл используется в встроенной цели, где
Flash является ограниченным ресурсом и который никогда не выходит, и для этого я хотел бы, чтобы
этот код «выхода» был отключен. < /Code> - это класс, в котором необходим деструктор
для нормальных обстоятельств, но не требуется для статического
variables.
>

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

struct Abstract {
virtual ~Abstract() {}
};

struct A : public Abstract {
int i = 0;
};

static A a;
static A b;
Далее приведен сгенерированный код ассемблера (составлен с -os -Std = c ++ 11 -fno -Exceptions -fno -rtti ), сгенерированный Godbolt
Abstract::~Abstract():
ret
A::~A():
ret
A::~A():
jmp operator delete(void*)
Abstract::~Abstract():
jmp operator delete(void*)
pushq %rax
movl $__dso_handle, %edx
movl a, %esi
movl A::~A(), %edi
call __cxa_atexit
popq %rcx
movl $__dso_handle, %edx
movl b, %esi
movl A::~A(), %edi
jmp __cxa_atexit
vtable for Abstract:
vtable for A:
b:
.quad vtable for A+16
.long 0
.zero 4
a:
.quad vtable for A+16
.long 0
.zero 4
< /code>
Как видно в коде ассемблера выше достаточного количества инструкций, чтобы
это код очистки. Он не должен портативный - пока он работает в недавних версиях GCC. Атрибуты, сценарии линкеров, изменение объектных файлов и другие трюки в основном приветствуются.

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

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

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

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

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

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