いろきゅうの(元)はてなダイアリー

はてなダイアリーから移行中…

危険なコード

void threadFunc(void*)
{
    std::string strString = "にょ";   // リーク!!

    _endthread();
}

int main()
{
    _beginthread(threadFunc, 0, NULL);

    // メインスレッドは適当に待ってにょ。
    ::Sleep(256);

    return 0;
}

このコードは strString がメモリリークします。なぜなら、strString のデストラクタが呼ばれる前にスレッドが終わっているからですな。'}' が来る前にスレッドが終わってる。
こんなバグに遭遇して小一時間悩んでました…。 経験しないとわかりづらいバグだなぁ…これは…。^^;