C ++对象可以有块范围吗?

时间:2013-01-28 01:11:46

标签: objective-c-blocks objective-c++

C ++对象可以有块范围吗?例如,这样可以:(它崩溃了)

(轻松一点,我还在学习C ++)

__block Poco::Thread* lastThread;

dispatch_async(dispatch_get_main_queue(), ^
{
    for (int i = 1; i <= 5; i++)
    {
        Poco::Runnable* worker = new  Worker(_counter, "worker" + Poco::NumberFormatter().format(i));
        Poco::Thread* workerThread = new Poco::Thread();
        workerThread->start(*worker);
        lastThread = workerThread;
    }
});

lastThread->join(); //wait so we can watch what happens. 

2 个答案:

答案 0 :(得分:3)

您的代码有效,声明指针__block范围没有错。但是,您的代码将崩溃,因为lastThread在调用join()时未指向任何对象。您异步运行该块,因此在lastThread->join()指向工作线程之前几乎肯定会达到lastThread

答案 1 :(得分:2)

是的,指针可以有块范围。它崩溃的原因是lastThread->join()和指针初始化之间存在竞争。