如果我重寫我的類的析構函數,是否可以對它進行檢查,如果該實例應該被殺死或發送到池中?我想簡化重用obj,用戶只需要釋放它(或者留給編譯器),析構函數會檢查它是否可重用。當析構函數運行時,是否可以不破壞obj?
ReusableClass::~ReusableClass() {
if (x == 1) {
// abort destructor, send to pool
}
}
如果我重寫我的類的析構函數,是否可以對它進行檢查,如果該實例應該被殺死或發送到池中?我想簡化重用obj,用戶只需要釋放它(或者留給編譯器),析構函數會檢查它是否可重用。當析構函數運行時,是否可以不破壞obj?
ReusableClass::~ReusableClass() {
if (x == 1) {
// abort destructor, send to pool
}
}
一旦對象的析構函數開始運行的對象被認爲是死:12.4 [class.dtor]段14:
一旦析構函數被調用的對象,該對象不再存在; ...
當然不是 - 你有沒有參考對象要麼 - 你怎麼能回收的對象呢?
所以解決這個問題,你會有解決方案。使用智能指針並將引用存儲在任何實際需要它的地方,可能位於地圖中或被另一個對象所擁有(例如,現在看起來更像Java解決方案),或者在準備就緒時手動刪除它(這不太智能) 。
也許你應該考慮像一個智能指針與自定義刪除器。 –
你想重用對象本身,還是僅僅重用對象佔用的內存/空間? –
我想重用對象 – Nezquick