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.
答案 0 :(得分:3)
您的代码有效,声明指针__block
范围没有错。但是,您的代码将崩溃,因为lastThread
在调用join()
时未指向任何对象。您异步运行该块,因此在lastThread->join()
指向工作线程之前几乎肯定会达到lastThread
。
答案 1 :(得分:2)
是的,指针可以有块范围。它崩溃的原因是lastThread->join()
和指针初始化之间存在竞争。