Ais*_* Li 6 c++ overloading operator-overloading dynamic-memory-allocation
下面的代码允许您查看被删除的变量的大小:
#include <iostream>
#include <stdlib.h>
using namespace std;
struct P {
static void operator delete(void* ptr, std::size_t sz)
{
cout << "custom delete for size " << sz <<endl;
delete (ptr); // ::operator delete(ptr) can also be used
}
static void operator delete[](void* ptr, std::size_t sz)
{
cout << "custom delete for size " << sz <<endl;
delete (ptr); // ::operator delete(ptr) can also be used
}
};
int main()
{
P* var1 = new P;
delete var1;
P* var2 = new P[10];
delete[] var2;
}
Run Code Online (Sandbox Code Playgroud)
输出:
custom delete for size 1
custom delete for size 14
Run Code Online (Sandbox Code Playgroud)
我的问题是:参数在哪里std::size_t sz获得赋值?
Where does argument std::size_t sz get assigned value?
Run Code Online (Sandbox Code Playgroud)
编译器就是这样做的。该表达式delete var;有两部分 - 首先P调用 for 的析构函数(如果有),然后operator delete使用编译器提供的参数进行调用。
尽管名称相似,“删除运算符”和“ operator delete”是两个不同的东西。
(比亚恩表示,他很遗憾没有想出更好的名字)。