- 1
- 2
- 3
static char *szClassName = new char[14];
static char *szCurrentDirectory = new char[MAX_BUFFER];
static char *szNewFolder = new char[MAX_BUFFER];
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+60.6
static char *szClassName = new char[14];
static char *szCurrentDirectory = new char[MAX_BUFFER];
static char *szNewFolder = new char[MAX_BUFFER];
глобальные указатели рулят, delete нигде не вызывается
А зачем для указателей, которые храняться в static, вызывать delete?
если бы было что-то вроде static char * s = "hello";
тогда ничего не надо
1. память при завершении процесса по-любому освобождается потому как освобождается вся куча стандартным кодом который добавляется компилятором в исполняемый модуль
2. человек выделяет массивы из стандартных типов, о каких деструкторах идет речь? или для каждого char в массиве нужен деструктор?
3. Если бы эти массивы были выделены статически то это бы увеличело размер исполняемого модуля на величину выделенного буфера. Например если человек хочет 1 мегабайт буфера (#define MAX_BUFFER 1024) и он пишет static char buffer[MAX_BUFFER]; то считайте что ваш бинарь на метр толще после компиляции, а если делать как этот чел то результат тот же только бинарь на метр худее получается.
Открываем windows.h и видим: #define MAXPATH 256
>Для этого правда придется путь подмапливать чтобы API смогло до него добраться.
Будто бы ты это делаешь в каждой своей программе, что-бы можно было использовать более длинный путь? Это делают лишь в редкостных утилитах, которые в обыденной жизни не используют, раз Explorer.exe не дружит с длинными путями.
In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path.
Функции которые возвращают (юникодные версии) путь (к моим документам и тп папкам) сами его дописывают если путь очень длинный (сам не сталкивался но видел в логах)...
Ну это как программу завершить... Да и как уже было сказано выше - не все реализации С++ одинаково полезны. В некоторых старых не освобождает память, если не чистить.
>2.человек выделяет массивы из стандартных типов, о каких деструкторах идет речь? или для каждого char в массиве нужен деструктор?
С таким же успехом могла выделиться память под обьект. Применим new, а потом не чистим и деструктор не вызываеться.
Мне что-то думаеться, что говнокодер этого говнокода как для строк static char *szClassName = new char[14]; не вызывал delete, так и для обьектов...
Не удивлюсь, если когда нибудь char *, по мере развития проекта, заменят на CString*, то вызываться delete не будет, естественно деструктор тоже не вызоветься.
Вообще не вызванный деструктор для строк не так важен, но для некоторых критических обьектов это может быть фатально... :(
Да сейчас ещё и упаковщики exe'шников хорошие есть. Этот метр, заполненый нулями, упакуеться такой тулзой в пару байт. :)
например если сам бинарь весит всего 100 кило прибавлять к нему тонну веса как-то не серьезно
а то мы тут спорим про разные платформы а скорее всего это было под виндоуз на вижуал си
Но не вызывать его, только из-за того, что в большинстве ОС он вызовиться сам - говнокодно.
И деструктор всё-равно сам не вызоветься. У нас не C#!
голые указатели - это плохо.
неоправданное применение static - это плохо.
автору кода - строчно пройти курс живительной эвтаназии.
А есть одетые указатели?