在平常的编程里面,这样的代码算是再普通不过了:
void func() { SomeType local_obj; another_func(local_obj); // ... }
然而最近我却遇到了问题。在使用 boost::asio 的时候,使用了这种常规的做法。结果遭遇段错误。后来才意识到是在进行异步调用。 another_func 拿着 local_obj (事实上,真正的代码是一个 local 的容器,我把它的 iterator 传递到了一个异步调用里面)却在 func 返回的时候就已经被析构了。不过,在异步调用里面也可以很容易地自动管理对象的生存期,很常用的方法就是使用 boost::shared_ptr 了,在 asio 的例子里面也随处可见。
现在刚刚开始接触异步调用、多线程编程方面的东西,很多东西还不熟悉,需要多多实践啊。