-9

在 C++ 中,我可以在调用堆栈中没有 A() 的情况下从 A() 内部跳转到 B() 吗?goto这个案子有什么类似的吗?我的情况是我应该在其功能之一结束时销毁一个对象。

class timeBomb{
public:
  void detonate(int time){
    sleep(time);
    goto this->blast(this); //something like that
  };
  timeBomb();

  static void blast(timeBomb bomb){
    delete bomb;
  }
}

int main(){
  timeBomb *myBomb = new timeBomb();
  myBomb->detonate(2);
  return 0;
}

我本可以离开的delete this;。但在我的代码中,在特定条件下,构造函数本身必须调用一个函数,该函数又调用一个函数,如 detonate。

为了解决我的问题,我可以问我能否中止创建对象。但我发现从一个函数跳转到另一个避免调用堆栈中的父函数非常有趣且有用。

4

2 回答 2

1

如果您有通用功能,则创建一个 ( private) 方法并从所有需要该功能的方法中调用它:

class timeBomb {
public:
  void detonate(int time){
    sleep(time);
    blast();
  };
  timeBomb();

private:
  void blast(){
    delete this;   // Very dangerous!
  }
};
于 2013-07-24T11:05:28.287 回答
1

您可以“及时返回”到使用setjmpand之前去过的地方longjmp,但是没有什么可以跳转到代码中的随机新位置(除了各种依赖于系统的东西,比如使用内联汇编程序或类似的东西 -而且这仍然很难变得非常通用,因为您需要注意堆栈清理和其他类似的事情)。

于 2013-07-24T11:02:26.347 回答