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();
}
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.