qicosmos/cosmos

SyncQueue Take(T& t) bug

Closed this issue · 2 comments

你好,最近在看你的书,书很好。
在第9章发现一个潜在的bug。

SyncQueue.hpp

void Take(T& t)
{
    ......
    if (m_needStop)
        return;
}

如果这里不给引用t赋值的话,在ThreadPool中调用Take(T& t),后直接调用t();就会产生异常

这样是不是更好一些?

void Take(T& t)
{
    ......
    if (m_needStop)
    {
        t = [] { };
        return;
    }
}

hi,我觉得t在外面赋一个nullptr的初值更好,take出来之后判断是否为nullptr。当然你在内部加也可以,但是感觉外面赋初值会更好。

@qicosmos 嗯 其实这样也好,谢谢