的部分12.5/4 [class.free]
:什麼安置釋放函數被引入?
如果查找的結果是不明確的或不可訪問,或者如果 查找選擇放置釋放函數,程序是 形成不良。
因此,例如,如果我們寫:
class A
{
public:
void* operator new (std::size_t count, std::size_t msg, std::size_t mmsg);
void operator delete (void* ptr, std::size_t msg, std::size_t mmsg);
};
void* A::operator new (std::size_t sz, std::size_t msg, std::size_t mmsg){
std::printf("global op new called, message = %lu, %lu", msg, mmsg);
return std::malloc(sz);
}
void A::operator delete (void* ptr, std::size_t msg, std::size_t mmsg){
std::printf("global op new called, message = %lu, %lu", msg, mmsg);
}
放置釋放函數將永遠不會被稱爲刪除表達式求值的一部分。因此,詢問他們的介紹是合理的。我們只能通過撥打operator[](void*, std::size_t, std::size_t)
的手動電話給他們打電話,但這不方便。