Помогите, пожалуйста с дизайном функции: есть два альтернативных
парсера. Оба происходят от одного виртуального предка.
Вызов конструктора - берет много времени, так как должен загрузить
и обработать очень много предварительных данных. Дана функция ф,
которая вызывается очень много раз и использует нужный парсер:
1 void f(bool forceInit=false){
2 extern Options options;
3
4 static bool firstTime=false;
5 static Parser * parserPtr;
6 if(firstTime || forceInit){
7 fisrtTime=false;
8 if(parserPtr!=NULL) delete parserPtr;
9 if(1==options.parser()) parserPtr=new Parser1();
10 else if(2==options.parser()) parserPtr=new Parser2();
11 else error();
12 parserPtr->Init(); //very slow
13 }
14 //do stuff
.....................
1234 }
В принципе, количество взовов оператора new больше, чем количество вызовов delete ровно на один раз. Так что утечка памяти - постоянная, не зависит от количества вызовов функции f и равняется max(sizeof(Parser1), sizeof(Parser2)).
Но все равно, совесть меня терзает за неспаренный delet-ом оператор new.
Можно ли исправить дизайн функции, не переписывая парсеры, и не
вызывая инитиализацию больше, чем надо?
Ответ на:
комментарий
от AIv
Ответ на:
комментарий
от phrm
Ответ на:
комментарий
от phrm
Ответ на:
комментарий
от AIv
Ответ на:
комментарий
от anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум проблемы с new delete (2002)
- Форум GLib проблема с потоками GMainLoop (2014)
- Форум Вопрос про new и delete. (2003)
- Форум DELETED (2019)
- Форум Deleted (2019)