auto_ptr中的CRITICAL_SECTION,没有DeleteCriticalSection调用

时间:2013-03-20 15:39:09

标签: c++ windows multithreading c++builder critical-section

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

0 个答案:

没有答案