Operator delete問題

請問各位大大下面的兩行

void operator delete (void* ptr, const std::nothrow_t& nothrow_constant)

void operator delete (void* ptr, void* voidptr2)

的意義是什麼呢,何時會用到呢?



謝謝!
更新: placement delete是自己必須去實做嗎?
因為網路上資料是說要自己去實做placement delete!
請問是不是呢?

謝謝!!
更新 2: 那void operator delete (void* ptr, const std::nothrow_t& nothrow_constant)意義是什麼呢?
更新 3: 想問"new (size_t, const char*, int)"中的"int"所輸入的參數有什麼意義呢?
有什麼書是建議看的呢?
謝謝!
更新 4: 原來如此!
但是"《Effective C++》(3版) "這一本書絕版了!不知道還有什麼好書能推薦呢?
謝謝!
更新 5: T* place =new (nothrow) T;
T* pt = new (place) T;
operator delete (pt,place);
//operator delete (pt);這樣寫也能釋放記憶體
為什麼還要有operator delete (void* , void*);呢?
operator delete (pt,place);參數順序正確嗎?
謝謝!
更新 6: 發現錯誤了
char* place =new (nothrow) char[sizeof(T)];
T* pt = new (place) T;
delete pt;
更新 7: >>delete (void* , void* ) 純粹只是為了和 new 作 signature 匹配,參數完全沒意義
剛剛有查了一下只要用delete pt;當T* pt = new (place) T出現錯誤的時候會自動調用operator new 匹配operator delete(void* operator new(size_t, void*)和void operator delete(void*, void*)) signature !
感謝!
更新 8: 為什麼void operator delete(void*, void*)裡面會空白這樣有意義嗎?
void operator delete(void*, void*)
{}
感謝!
更新 9: 我本來以為應該要
void operator delete(void* ptr1, void* ptr2)
{
delete ptr1;
}
感謝!
更新 10: 為什麼不是
void operator delete(void* ptr1, void* ptr2)
{delete ptr1;}
void operator delete(void*, void*)
{}
這樣能是放空間嗎?(我知道預設是這個)
這會不會是要自己實做這個才有意義呢?
謝謝!!
更新 11: "是放"=>釋放
更新 12: >>記憶體的來源,他可能來自
>>- operator new
>>- malloc
>>- stack
>>- global、static
>>- 自己或別人寫的 pool
>>- 由另一個 process 或 dll 所提供的共用記憶體
原來如此!也是
>>operator new/delete 和
>>new/delete expression
>>之間的差別
operator new/delete可以重載
new/delete expression無法重載=配置空間+初始化
更新 13: 確實要用 operator delete(ptr1);
感謝!
1 個解答 1