因此,您有對象x
類型X
和對象y類型Y
。 X
和Y
是相關的,並且要求在其相關的x
之前銷燬y
。編譯時間壽命檢查
換句話說,像這樣:
struct X { void do_something(); }
struct Y
{
Y(X&x) : my_x(&x) {}
void do_something() { my_x->do_something(); }
private:
X * my_x;
};
被你想使用智能指針,上述my_x
防禦程序員。但據我所知,沒有合適的指針。這個指針需要知道它不擁有它的原始指針,並且它不應該超過它指向的對象。
我認爲大多數情況下這是不可能在編譯時顯示的。然而,在某些情況下,可以證明y
不合適地超過其x
。
當你遇到這種情況,或者我們遇到一個運行時斷言時,你能想出任何方法來創建編譯時錯誤嗎?
由於生命週期的範圍不能通過靜態分析來確定,很難想象編譯時的執行。 – 2013-05-01 17:30:09
如果您需要序列化確保您的運行時尚未提供,請執行您自己的測序。 – jthill 2013-05-01 17:30:22
你是什麼意思被銷燬?你能否把'X'作爲'Y'析構函數中的最後一個語句來銷燬? – 2013-05-01 17:33:37