【发布时间】:2019-12-17 11:29:30
【问题描述】:
以下代码在 clang(x86_64-pc-linux-gnu 上的版本 5.0.0-3~16.04.1)和 gcc(9.2.0 )。
void operator delete(void* ptr) noexcept {
std::cout << "overloaded delete" << std::endl;
free(ptr);
}
int main() {
int* pint = new int;
delete pint; // clang doesn't go through overloaded operator delete, gcc does
}
gcc 通过重载的operator delete 而clang 避免它更喜欢global delete。
(当添加一个重载的operator new 时,两个编译器都同意并通过两个重载版本)。
【问题讨论】:
-
对于信息,
MSVC也可以通过您的过载(Visual Studio 中的clang-cl不会)。
标签: c++ gcc clang operator-overloading overload-resolution