最近我注意到我的一些物体变得非常大,过了一段时间我可能不再需要它们了。我可以等到析构函数的本地作用域结束时释放内存或使用代码块来使用自定义作用域。
但是,我有这个想法,为每个对象实现一个清除内存的void MyObject::clear()
方法:
class MyObject{
bool is_cleared;
// Other stuff
public:
MyObject();
~MyObject();
void clear();
// Other stuff
};
MyObject::MyObject()
: is_cleared(false)
{
// construct the class
}
void MyObject::clear(){
if (!is_cleared){
// clear memory
is_cleared = true;
}
}
MyObject::~MyObject(){
this->clear();
}
这样我可以让析构函数清除内存或自己执行。这被认为是好的还是坏的做法?我该如何改进呢?
答案 0 :(得分:0)
这种技术没有什么特别糟糕的(例如,它被STL容器使用)。但是,您还需要实现复制构造函数和赋值运算符(或使您的对象不可复制且不可分配)。这是因为您已经实现了析构函数,因此您必须遵循the rule of three。
答案 1 :(得分:0)
这是不好的做法。你应该设计对象的所有权,以便当你“不再需要它们”时它们被破坏了。
这可以像在堆上分配对象一样简单,并在完成后删除它。然后它将清理它分配的任何动态内存。
答案 2 :(得分:0)
我认为这是一种不好的做法。
首先,如果尺寸很大,你应该尽快释放你不需要的东西。如果该数据在对象死亡之前不能存活,则不应使用成员将大数据存储在对象中。这条规则应该有一些例外。如果你的许多物品都需要它,你就是在设计太多责任的物品。
那么,您之前是否测量过需要来清理内存?如果不是这可能是一个不必要的优化。只要等到它们超出范围,为什么要这么麻烦?