我希望实现一个(双向)链表,其中placement new
仅在内部调用,将所有内存指向使用类似下面的方法分配的池:
char *memPool = new char[4096]; // One-off normal 'new'
最初我打算实现自己的类,该类接受指向(管理类)预分配内存池的指针。但是我想先确定是否可以通过 std::list
实现相同的结果。特别是,David Rodríguez 在此 SO 问题的第三部分中提到的内容令我感到担忧。
std::list
需要在其组件节点上调用 new
和 delete
,这很有道理,但我想修改此行为,使得所有要分配的节点都使用 placement new
放置到我的自定义池中。因此,我的问题是:
有没有一种方法可以指定一个 placement new
std::list
,例如:
std::list<std::shared_ptr<Cls>> myList = new (pool.getFreeAddr()) list<Cls>;
应该使用自定义分配器来分配节点,以便将所有内容严格存储在自己的内存池中。
(注意:如果我希望在自定义内存池中使用shared_ptrs
,则需要使用自定义分配/删除函数。)
rebind
很简单。其背后的逻辑却很棘手。 - Pete BeckerT
一起使用。我想我不必提到这种技巧性 - 鉴于它被链表使用,并且“重新绑定”只是机制,这个事实应该是显而易见的。 - Steve Jessopstd::list<T> &
的方法不应该是个问题。感谢您提供的所有信息! - Ephemera