在c++;,有没有办法从一个函数跳到另一个函数 在C++中,如果调用栈中没有(?),我能从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; }

在c++;,有没有办法从一个函数跳到另一个函数 在C++中,如果调用栈中没有(?),我能从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; },c++,C++,我本可以删除这个。但是在我的代码中,在一个特定的条件下,构造函数本身必须调用一个函数,而这个函数反过来又调用一个函数,比如雷管 为了解决我的问题,我可以问我是否可以中止创建对象。但是我发现在调用堆栈中从一个函数跳到另一个函数既有趣又有用。您可以“回到”使用setjmp和longjmp之前去过的地方,但是在代码中没有任何东西可以跳到随机的新位置(除了各种依赖于系统的东西,比如使用内联汇编程序或类似的东西——这仍然很难做到非常通用,因为您需要注意堆栈清理和其他类似的事情)。如果您有公共功能,那么就创

我本可以删除这个。但是在我的代码中,在一个特定的条件下,构造函数本身必须调用一个函数,而这个函数反过来又调用一个函数,比如雷管


为了解决我的问题,我可以问我是否可以中止创建对象。但是我发现在调用堆栈中从一个函数跳到另一个函数既有趣又有用。

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

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

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

private:
  void blast(){
    delete this;   // Very dangerous!
  }
};

不,您不能使用
goto
转到其他函数。这看起来非常错误。您认为可以使用setjmp和longjmp,但不应该使用。您调用该函数吗?至少,如果您的类包含一个成员,该成员说
delete this;
,它应该有一个私有(或受保护)析构函数。