2011-10-09 91 views
0

有沒有辦法知道我的對象是活着的,除了在類中聲明靜態私有成員,並在構造函數中增加它,在析構函數中遞減它。提前致謝。如何知道我的對象是否存在於C++中?

+1

你是什麼意思「活着?」我認爲對此的回答是這樣的,「呼叫者知道是否因呼叫者正在控制它而活着」。你怎麼能*不知道它是否「活着」?你對此有何問題? – tenfour

+1

如果您的對象已被破壞,則該對象的任何方法都不應運行。如果在銷燬之後調用方法,那麼在程序中某個地方會出現錯誤* else *。你的對象是活着的,或者它不存在。 –

+0

太糟糕了「不」沒有足夠的字符是一個正確的答案。 –

回答

1

您還可以通過使用shared_ptr/weak_ptr的STL非侵入式地對您的類執行此操作。

stl::shared_ptr<YourClass> p = stl::make_shared(...); // holds a strong reference to your type 
stl::weak_ptr<YourClass> wp(p); 

cout << wp.use_count(); // "1" 

p.reset(); 

cout << wp.use_count(); // "0" 
0

你的意思是知道你是否至少有一個實例化的類實例?靜態計數器幾乎是最好的方法。這就是無論如何會做到這一點。 :)

+0

對不起,我應該說我無法以任何方式修改構造函數和析構函數。 – arai

-1

如果有問題的代碼存在一個非靜態方法裏面,那麼你的目標是通過定義「活着」 - 只要你不標新立異像一個方法中刪除。

如果你這樣做(不推薦,除非你真的知道自己在做什麼),然後確保你NULL出指針隨即並始終確保比較thisNULL,檢查是否你的對象是「活着的」。

+1

如果有人刪除它,不回答如何檢查對象是否處於活動狀態。 –

+0

如果您無法修改原始類,您自己的答案也是不完整的,但是我沒有降低它的效果,因爲它對於特定情況仍然有用。 – Spire

+0

我相信他可以指定原始類別,否則這個問題就沒有意義了。 –

相關問題