取這兩個類如:讓本地變量引用其他局部變量有危險嗎?
struct Owned {
Owned() : i() { }
void print() { cout << ++i << endl; }
int i;
};
struct Owner {
Owner(Owned& o) : o(o) { }
Owned& o;
~Owner() { o.print(); }
};
它是危險的這種方式來使用它們呢?
int main() {
Owned owned;
Owner owner(owned);
}
看來,這取決於它們的破壞,這可能導致owner
析構函數來調用一個被毀壞的owned
功能的順序。是否定義了銷燬局部變量的順序,以及如何處理兩個實例互相引用的情況?
請原諒我,如果這是常識,我還沒有讀過關於它的任何地方。
好吧,這基本上是我在想什麼。謝謝。 – 2012-03-22 17:38:27
通過「讓兩個實例互相引用」我假定你的意思是'擁有'和'所有者'都包含對立類型的成員引用。這樣做,你不能真的。但那是因爲引用不能在創建後重新分配給新的對象。如果你只是a)切換到指針,b)在構造函數之外執行任務(將你從特定的時間問題中解脫出來),那麼你可以完全掌握什麼可以達到什麼目的。但具有很大的權力....:p – 2012-03-22 17:43:39
@邁克爾:只需分配給建設後的「其他」成員。我已經有指針了。 '一個o;兩個t(&o); o.other =&t;' – Xeo 2012-03-22 17:44:40