C++ 中的重载删除运算符

Overload delete operator in c++

本文关键字:删除 运算符 重载 C++      更新时间:2023-10-16

我在C++中重载了一个删除运算符,我为此使用了free()

class A
{
private:
    int x;
    int y;
public:
    void operator delete(void* ptr)
    {
        free(ptr);
    }
    void operator delete[](void* ptr)
    {
        free(ptr);
    }
}
int main()
{
    A *a = new A();
    A *b = new A[10];
    delete a; // This should free 8 bytes
    delete b; // This also 8 only
    delete[] b;// This should free 80 bytes
    return 0;
}

如何自由地做这项工作

据我所知,动态分配存储分配的大小作为隐藏,因此在从那里使用释放时

但是当我们使用delete b;delete[] b;隐藏分配时,总是说 80 然后 8 只被取消分配。

如果它的方式不正确,那么我们如何使用 free 重载删除运算符?

delete array 与指针一起使用,该指针与 new T[n] 一起使用(对于某些类型 T 和某些类型 n (会导致未定义的行为。

delete b也知道按照您期望从delete[] b分配的大小

delete [] b的位置使用delete b可能会导致未定义的行为。您错过的方面是,如果不使用 delete[],将不会调用数组中单个对象的析构函数。

不要在这里重复(许多(先前的答案,请在StackOverflow上搜索。

这是一个:删除与删除[]运算符在C++

newdelete是一对紧密耦合的操作。只重载其中一个是不正确的,因为它们是同一对象分配方案的两半。

默认的新建和删除实现在标准中未指定,因此实现是定义的。

可能是默认的新用途malloc()在系统上分配内存,但可能不是。