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)
你正在寻找一个析构函数:
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)
具有移动语义的好处已经做了正确的事情,复制语义已经被禁用,而析构函数已经在管理你的资源.
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |