我正在为我的一个项目中的一组对象设计垃圾回收机制。我希望能够使用
通过重载
将编辑:另一种方法是将
还有其他想法吗?
new
动态分配这些对象,并且永远不需要调用delete
。通过重载
operator new
来调用一个实现GC的专门的分配器对象是可以实现的(当分配了过多内存时触发收集)。然而,我有一个问题:用户仍然可以对这些对象执行delete
,而我不想让这样的事情发生。将
operator delete
设置为私有是有问题的,因为C++处理构造失败的方式——如果operator new
是公共的,则operator delete
也应该是公共的。另一种被建议的替代方案是将operator new
和operator delete
都设置为私有,并只向用户公开工厂创建方法。我可以这样做,但感觉不太干净,需要编写额外的代码。
operator delete
设置为空(或抛出异常)。然后,为了实际释放对象,我的GC将显式调用析构函数,然后使用全局的::operator delete
释放内存。
delete
,但我也可以这样做(如果该运算符是私有的,我可以将其设置为friend
)。 - Eli Bendersky删除
对象的情况下不要两次调用析构函数,delete表达式调用析构函数,然后是operator delete,会抛出异常,一段时间后您会GC对象] - Steve Jessop