c++ - 如何区分使用内存池分配的类

标签 c++ memory-management boost c++11

在一个项目中,我有两种类:

  • 类型 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/

相关文章:

Objective-C ARC 与 MRR : why the switch?

c++ - Perl 正则表达式运行速度快于 C++ Boost 实现

c++ - inferior 停止是因为它收到了来自可调整大小的滚动区域上的操作系统错误的信号

c++ - 将 oracle 表动态导出到平面文件

c++ - 为全局 constexpr 变量生成唯一值

windows - 衡量程序内存使用情况的最佳方法是什么?

python - 将 CSV 数据逐步写入硬盘以减少内存占用

c++ - 函数参数中的结构 C++ 数组根本不起作用

c++ - Boost Graph 有向图的无向遍历

c++ - boost::this_thread::interruption_point() 不会抛出 boost::thread_interrupted& 异常