2013-07-24 165 views
-8

在C++中,我可以從A()跳轉到B()而不需要調用堆棧中的A()嗎?這種情況下有沒有類似goto?我的情況是我應該在它的一個函數結束時銷燬一個對象。我可以用delete this;去掉。但在我的代碼中,在特定的條件下,構造函數本身必須調用一個函數,然後調用像引爆一樣的函數。在C++中,有沒有辦法從一個函數跳轉到另一個

解決我的問題,我可以問我可以中止創建一個對象。但是我發現從另一個函數跳到另一個函數避免了調用堆棧中的父函數迷人和有用。

+12

不,你不能用'goto'去一個不同的功能。 – chris

+9

這看起來非常錯* –

+3

認爲你可以使用setjmp和longjmp,但你不應該這樣做。 –

回答

1

您可以「回到過去的時間」到之前使用過setjmplongjmp的地方,但沒有什麼可跳轉到代碼中的隨機新位置(除了各種系統相關的東西,例如使用內聯彙編器或其他一些 - 這仍然很難做出非常通用的,因爲你需要關心堆棧清理和其他事情)。

1

如果你有共同的功能,然後做一個(private)方法,並從需要該功能的所有方法調用它:

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

private: 
    void blast(){ 
    delete this; // Very dangerous! 
    } 
}; 
相關問題