看一篇教程,看到有如下代码,给的打印结果是:
custom delete for size 1
custom delete for size 18
我感觉有点奇怪,在自己机器上跑了下,打印结果相同,重载了delete操作符,为何打印的结果是1和18呢?
我打印出来sizeof(P)结果是1,为何delete[] var2时显示的确是18不是10呢?
#include <bits/stdc++.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;
}
在C++中,重载delete是允许我们对已经存在的函数进行修改或重写。这允许我们使用新的逻辑来删除对象,而无需每次都重新实现它。在重载delete时,需要注意以下几点:
cpp
void delete(const MyClass& object);
void delete(void* object);
void delete(const std::shared_ptr<MyClass>& object);
void delete(std::shared_ptr<MyClass>& object);
cpp
MyClass myObject;
delete myObject;
cpp
int size = sizeof(myObject);
cpp
MyClass myObject;
delete myObject;
如果你在打印大小时遇到疑问,那么问题可能在于你的函数调用或者在调用函数后没有正确地释放内存。你可能需要检查你的代码,确保在调用delete函数后,你正确地释放了对象占用的内存。