引用已经析构了的局部变量

May 21, 2007 – 4:42 pm

在平常的编程里面,这样的代码算是再普通不过了:

void func()
{
    SomeType local_obj;
    another_func(local_obj);
    // ...
}

然而最近我却遇到了问题。在使用 boost::asio 的时候,使用了这种常规的做法。结果遭遇段错误。后来才意识到是在进行异步调用。 another_func 拿着 local_obj (事实上,真正的代码是一个 local 的容器,我把它的 iterator 传递到了一个异步调用里面)却在 func 返回的时候就已经被析构了。不过,在异步调用里面也可以很容易地自动管理对象的生存期,很常用的方法就是使用 boost::shared_ptr 了,在 asio 的例子里面也随处可见。

现在刚刚开始接触异步调用、多线程编程方面的东西,很多东西还不熟悉,需要多多实践啊。

  1. One Response to “引用已经析构了的局部变量”

  2. 最近porting同事的一个python程序到C++, 时间紧任务重,没仔细看清楚逻辑就开工了,结果就是shared_ptr + any满天飞,晕死人了,真是担心写出来的程序还不如人家原来python的了.

    By is on Jul 13, 2008

Post a Comment