@0nk0l0g

Почему лучше не использовать статические конструкторы?

Слышал, что лучше обойтись без статических конструкторов и деструкоторов в коде. Особенно, если проект большой. С чем это связано и верен ли совет?
Спасибо
  • Вопрос задан
  • 333 просмотра
Пригласить эксперта
Ответы на вопрос 2
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
Cтатические конструкции (например," static const Foo & F = * new Foo ( ) ; " ) могут иметь утечки памяти. Если LLVM сбилдили в виде динамической библиотеки , он может перезагружается неограниченное число раз , и в каждой итераций загрузки будет создаваться один экземпляр 'Foo ' .
Кроме того, если LLVM построен на Windows, MSVC 2013 ( который поддерживает LLVM ) , то функция статического создания уровня потоконебезопасна (безопасна начиная с MSVC 2015 ) . Некоторые варианты LTO будут создавать поток для каждого объекта.

Ну и вот здесь еще пишут, про скорость запуска приложения
llvm.org/docs/CodingStandards.html#do-not-use-stat...
Если вкратце, то пользователь будут ждать много времени прежде чем покажутся окошки и можно будет нажимать кнопочки. Лучше создавать синглтоны в фоне пока интерфейс делает вид, что приложение полностью загружено и готово к работе.
Ответ написан
Комментировать
@iv_k
если имеются ввиду статические объекты в глобальной области видимости, то конструкторы вызываются до ф-и main, деструкторы после выхода из нее.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы