在一个项目中,我有两种类:
std::unique_ptr<>
对于后者,正确的用法是调用new,像往常一样,分配一个新的实例,但永远不要调用delete。当内存池对象熄灭时,这些对象会被清除。范围。
因此,如果我在std::unique_ptr<>
中意外存储了一个B类实例,我将会遇到分段错误。同样,在Type B指针上显式调用delete也是个坏主意。
我应该使用哪种C ++机制来防止这些类型的错误发生?
作为一个简单但丑陋的修复,我正在考虑将所有类型B类重命名为具有MP(用于内存池)的前缀,因此我在视觉上知道而不是将它们填入内部std :: unique_ptr&lt;&gt;。
但是,如果我或我团队的其他成员意外地犯下这些类型的错误,最好有一种语言机制可以在编译过程中发现问题,或者至少以更明显的方式死掉。
答案 0 :(得分:5)
好吧,我在boost内存池中看到,有一个名为is_from()
的函数,它告诉一个给定的内存是否来自池。话虽如此,您可以覆盖delete
运算符,您可以在其中检查内存是否来自增强内存池,也就是说,只有当它不是来自池时才删除它。如果std::unique_ptr
以某种方式帮助您,也可以使用自定义删除工具。
答案 1 :(得分:3)
您也应该覆盖operator delete
。