如何重用堆栈中创建的对象

Mis*_*ith 2 c++ stack constructor object

我不是C++程序员,我非常尊重它的复杂性,所以我通常会远离它.尽管如此,我还是找到了一个我想修补的图书馆.

该库包含一个示例代码段,其中单个实例在本地范围内分配:

    Foo foo(arg1, arg2, ...);
Run Code Online (Sandbox Code Playgroud)

我想修改这个例子来重新初始化对象并用它做更多的事情,但我不能通过getter/setter或公共变量来做.如果没有创建更多实例,这可能吗?

如果没有创建新实例就无法做到这一点,我怎么能释放我不再需要的对象的内存?

例如,如果它是一个动态对象,我猜它会是这样的:

    Foo* pfoo;

    pfoo = new Foo(arg1, arg2, ...);
    pfoo->doSomething();
    delete pfoo;

    pfoo = new Foo(arg3, arg4, ...);
    pfoo->doSomething();
    delete pfoo;
Run Code Online (Sandbox Code Playgroud)

堆栈中分配的对象的等价物是什么?

Jef*_*eff 9

释放自动变量的唯一方法是让它们超出范围:

void bar() {
  Foo f1(arg1, arg2);
  f1.doSomething();

  {
    Foo f2(arg3, arg4);
    f2.doSomething();
    // other stuff ...
    // f2 dies here.
  }

  {
    Foo f3(arg5, arg6); // allocated on stack, possibly overlapping f2's old spot
    f3.doSomething();
    // ...
    // f3 dies here.
  }

  // f1 dies here.
}
Run Code Online (Sandbox Code Playgroud)