私有操作符在c ++中删除

Eli*_*sky 9 c++ garbage-collection memory-management new-operator

我正在为我的一个项目中的一系列对象开发垃圾收集机制.我想要的是动态分配这些对象,new而不必调用delete.

这可以通过重载operator new来调用为这些对象实现GC的专用分配器对象(当分配了太多内存时触发收集).但是,我遇到了一个问题:用户仍然可以delete对这些对象执行操作,但我不希望这样.

使operator delete私有是因为++处理故障在建设路上的C问题-如果operator new是公开的,operator delete应该是太.这有时也被认为是替代只是使双方operator newoperator delete私有的,只能暴露出工厂创建方法给用户.我可以做到这一点,但它感觉不太干净,需要额外的代码来编写.

编辑:另一种方法是使operator delete空(或抛出异常).然后,要实际释放对象,我的GC将显式调用析构函数,然后使用全局释放内存::operator delete.

还有其他想法吗?

Chr*_*s K -2

boost::shared_ptr<Type> ptr = boost::make_shared<Type>(); 
Run Code Online (Sandbox Code Playgroud)

你永远不会调用new,你永远不会调用delete。

为什么要重新发明轮子?智能指针确实是正确的选择。

  • 克里斯,我很清楚“shared_ptr”的存在。但这不是我的问题 (4认同)
  • @Chris:引用计数!=垃圾收集。例如,“shared_ptr”确实存在循环问题。 (2认同)