在一个项目中,我有两种类:
- 类型 A:我使用
std::unique_ptr<>
管理的正常分配类 - B 类:new 被重写以从boost memory pool 分配内存的类
对于后者,正确的用法是像往常一样调用 new 来分配一个新实例,但永远不要调用 delete。当内存池对象用完时,这些对象会被清理干净范围。
因此,如果我不小心将 B 类实例存储在 std::unique_ptr<>
中,我会得到一个段错误。同样,对 B 类指针显式调用 delete 也不是一个好主意。
我应该使用什么样的 C++ 机制来防止这些类型的错误发生?
作为一个简单但丑陋的修复方法,我正在考虑重命名我所有的 B 类类,使其具有像 MP 这样的前缀(用于内存池),所以我直观地知道不将它们塞进里面一个 std::unique_ptr<>.
但是,最好有一种语言机制可以在编译过程中发现问题,或者如果我或我团队的其他成员不小心犯了这些类型的错误,至少以更明显的方式终止。
最佳答案
好吧,我在 boost 内存池中看到,有一个名为 is_from()
的函数可以判断给定内存是否来自池。话虽如此,您可以覆盖 delete
运算符,您可以在其中检查内存是否来自 boost 内存池,意味着只有当它不来自池时才删除它。如果它以某种方式帮助你,你也可以为 std::unique_ptr
使用自定义删除器。
关于c++ - 如何区分使用内存池分配的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9536183/