Передо мной есть код, который я не совсем уверен, что думаю, что все в порядке.
Критический раздел помещен в auto_ptr
а также DeleteCriticalSection
никогда не вызывается на это. Но я, кажется, помню, что случаи CRITICAL_SECTION
должны быть изменены только с функциями критического раздела. Я попытался запустить это через проверку утечки памяти, и он пожаловался.
Это, конечно, часть многопоточной системы, и доступ к критическому разделу осуществляется в нескольких местах. Но если я урежу это, это в основном, как CRTITCAL_SECTION
лечится сейчас.
void test() {
auto_ptr<CRITICAL_SECTION> foo;
foo.reset(new CRITICAL_SECTION());
InitializeCriticalSection(foo.get());
}
Так как я не верю auto_ptr
выход за рамки правильно удаляет критический раздел, который я пытался быстро изменить это
void test() {
auto_ptr<CRITICAL_SECTION> foo;
foo.reset(new CRITICAL_SECTION());
InitializeCriticalSection(foo.get());
DeleteCriticalSection(foo.get());
}
и обнаружение утечки памяти стало намного счастливее.
Критические секции существуют до тех пор, пока приложение не закроется. Так что я должен потратить время, чтобы обновить код для использования DeleteCriticalSection
действительно удалить критическую секцию или просто жить с тем фактом, что приложение закрывается и освобождает всю память в любом случае?
Обновить
Ответ на WhozCraigДа, если посмотреть на это, несколько экземпляров объектов, содержащих критическую секцию, могут быть живы в любой момент времени и не могут совместно использовать одну глобальную критическую секцию.
Задача ещё не решена.
Других решений пока нет …