根據C++ 11(由於使用const_cast,請參見下面的引用),以下代碼是否構成「未定義行爲」?全局分配函數和const void *
const void* p = operator new(123);
operator delete(const_cast<void*>(p));
從C++ 11標準(3.7.4.2.3)有關報價:
供給至解除分配函數可以是空指針值的第一個參數的值;如果是這樣,並且如果釋放功能是標準庫中提供的功能,則該呼叫不起作用。否則,行爲理解過程連接定義,如果在標準庫提供給
operator delete(void*)
值不是由任operator new(std::size_t)
或operator new(std::size_t, const std::nothrow_t&)
以前調用標準庫
如果答案是否定的返回值之一,請提供來自C++ 11標準的引用證實了這一點。
我不明白爲什麼你投'p' – EoiFirst
我不明白這一點。傳遞給'operator delete' *的值是* operator new返回的值,完全按照需要。無論你想要什麼,你都可以自由地來回投射。 – molbdnilo
@EoiFirst因爲OP正在調用'operator delete',而不是使用'delete'表達式。 – Angew