我有一個類,我希望能夠設置一個標誌,說如果它是堆分配,所以它可以正確清理本身之後,而不是嘗試刪除自己,如果它是在堆棧。問題是......我似乎無法同時覆蓋new
和構造函數。所以它從我的new
重載設置isHeapAllocated
標誌,然後到我的構造函數重置標誌。檢測堆棧或堆分配
void* String8::operator new(size_t size)
{
String8* string = (String8*)malloc(size);
if(string == null)
Exception("allocation fail : no free memory");
string->isHeapAllocated = true;
return string;
}
String8::String8()
{
isHeapAllocated = false;
}
所以new String8()
設置isHeapAllocated
標誌,然後將其重置爲false
。有沒有辦法做到這一點?
它真的應該是調用類的職責,以刪除'String8'。 – Tushar 2013-04-06 21:03:13
一個類不應該介意它是在堆棧上還是在堆上分配。該類的用戶應該執行必要的清理(如果有的話)。 – mfontanini 2013-04-06 21:04:24
恕我直言,你應該使用類似boost類型的特徵來獲取關於對象的信息,而不是自己實現它。 – 2013-04-06 21:17:33