我面前有一些代码,我不太确定我认为没问题。
关键部分放入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 :是的,看一下包含临界区的对象的几个实例在任何给定时间都可以存活,并且不能共享一个全局关键区。