Visual Studio 2010 SP1、32 ビット exe、Dell Core i7。
明確にするために編集:
実稼働コードでの小さなメモリ リークを追跡しています。ワーカー スレッドで実行されるラムダを使用して、イベントをリスナーにディスパッチします。これは、リークがどのように発生するかを抽出した例です。このサンプルは、長時間 (数分) 実行するとリークします。誰でも理由を教えてもらえますか? 指摘されたらきっと自分を蹴るだろう。ありがとう。
#include "stdafx.h"
#include <process.h>
#include <cassert>
#include <tchar.h>
#include <stdlib.h>
#include <stdio.h>
//////////////////////////////////////////////////////////////////////////
template <class Func>
static void __cdecl WorkerThreadProc(void* pData) {
assert(pData != nullptr);
Func* pFunc = static_cast<Func*>(pData);
(*pFunc)(); // Execute the task.
delete pFunc; // Clean up.
}
//////////////////////////////////////////////////////////////////////////
template <class Func>
static void BeginThread(Func fn) {
Func* pFn = new Func(fn);
if (_beginthread(WorkerThreadProc<Func>, 0, pFn) == -1L) {
errno_t err;
_get_errno(&err);
assert(false);
delete pFn; // Clean up.
}
}
//////////////////////////////////////////////////////////////////////////
int main(int, char**)
{
printf_s("CTRL-C to quit:\n");
while (true) {
BeginThread( []()->void{} ); // Launch worker to execute task.
}
return 0;
}