gpt4 book ai didi

c++ - 为最终的 future 自定义内存分配器做准备

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:46 25 4
gpt4 key购买 nike

我的项目是在 c++11 中,使用 vs2012。现在我觉得不需要使用自定义内存管理,但是我应该采取什么安排以促进最终的 future 修改?

我想过为“new”/“new[]”/“delete”/“delete[]”使用宏,为容器和智能指针使用 typedef。

什么是最佳实践?

最佳答案

在我看来,您所要做的基本上就是确定您将在整个实现过程中使用的特定约定。让你的架构分配器知道的一个很好的模板是看看这是如何为 STL 容器实现的,并尝试设计你像它们一样的数据结构。例如,如果您在 std::vector 上查找示例interface 此容器的第二个参数始终是分配器类型。 Allocator 必须遵循某个 interface这将允许用自定义分配器实现轻松替换默认分配器实现。

但是回到您编写的代码:在我从事的一个项目中,我们将其定义如下。对于应该消耗大量内存的对象,我们定义了一个允许指定自定义分配器的模板化父类(super class)。

template<class AllocatedClass, typename Allocator=std::allocator<AllocatedClass>
class AbstractMyClass {
public:
static void *operator new(size_t sz){ /*...*/ }
static void operator delete(void *p){ /*...*/ }
};

现在,如果您定义它的子类,您将:

class MyClass : public AbstractMyClass<MyClass> {
};

因此,新对象 MyClass 将使用父类的指定分配器。如果你现在实现你自己的分配器,你可以简单地替换父类(super class)中的默认模板参数,或者你可以在你的子类中明确指定它。

使用这种方法,您在以后的某个时间点使用自定义分配器或多或少会比较安全。

关于c++ - 为最终的 future 自定义内存分配器做准备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12899737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com