如何重载delete[]运算符以显示被释放的字节数?

Mar*_*son 5 c++ operator-overloading new-operator dynamic-memory-allocation delete-operator

我正在尝试重载 new/delete 运算符,但显然重载 delete[] 运算符以显示释放的字节数没有执行任何操作。下面你可以看到我的代码(它编译没有任何错误),new和delete工作正常,但delete[]甚至没有被调用。从我读到的内容来看: https: //en.cppreference.com/w/cpp/memory/new/operator_delete自 C++14 以来,运算符 delete[] 支持字节数作为第二个参数(我目前正在使用 Visual studio 2019 与 C++17)。

#include <iostream>

using namespace std;

void* operator new(size_t size) {
    cout << "Allocating " << size << " bytes.\n";

    if (void* ptr = malloc(size))
        return ptr;

    throw bad_alloc();
}

void operator delete(void* memory, size_t size) noexcept {
    cout << "Freeing " << size << " bytes.\n";
    free(memory);
}

void operator delete[](void* memory, size_t size) noexcept {
    cout << "Freeing " << size << " bytes.\n";
    free(memory);
}

int main() {
    int* a = new int[20];
    delete[] a;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)