如何正确释放类成员?

V*_*oxd -1 c++ operator-overloading user-defined-functions class-members

我应该使用delete重载或del()函数或其他东西来释放类成员吗?

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();
}
Run Code Online (Sandbox Code Playgroud)

Bar*_*rry 6

你正在寻找一个析构函数:

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

但是要学习Zero of Rule并将其推迟到资源管理类:

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

具有移动语义的好处已经做了正确的事情,复制语义已经被禁用,而析构函数已经在管理你的资源.