Search code examples
c++operator-overloadinguser-defined-functionsclass-members

How to correctly deallocate class member?


Should I use delete overload or del() function or something else to deallocate class member?

class Field
{
private:
    size_t* square = new size_t[5];
public:
    void del()
    {
        delete[] square;
    }
    void operator delete (void* p)
    {
        delete[] reinterpret_cast<Field*>(p)->square;
    }
};
int main()
{
    Field f;

    delete &f; 
    //or
    f.del();
}

Solution

  • You're looking for a destructor:

    class Field
    {
    private:
        size_t* square = new size_t[5];
    public:
        ~Field() { delete [] square; }
    };
    

    But learn the Rule of Zero and defer instead to a resource managing class:

    class Field
    {
    private:
        std::unique_ptr<size_t[]> square;
    public:
        Field() : square(new size_t[5]) { }
    };
    

    Which has the benefits of having move semantics already do the right thing, copy semantics already being disabled, and the destructor already managing your resources.