我不是C++程序员,我非常尊重它的复杂性,因此通常我会远离它。尽管如此,我还是找到了一个我想修改的库。

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

    Foo foo(arg1, arg2, ...);

我想修改此示例以重新初始化对象并对其执行更多操作,但是我无法通过getters / setters或公共(public)变量来执行此操作。不创建更多实例就可以吗?

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

例如,如果它是一个动态对象,我想它应该是这样的:
    Foo* pfoo;

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

    pfoo = new Foo(arg3, arg4, ...);
    pfoo->doSomething();
    delete pfoo;

堆栈中分配的对象的等效值是多少?

最佳答案

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

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.
}

关于c++ - 如何重用堆栈中创建的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23683907/

10-10 01:01