【问题标题】:Using Memory Allocated by Different Allocator使用不同分配器分配的内存
【发布时间】:2012-02-08 10:59:30
【问题描述】:

假设我有一个名为vector 的类,它维护一些由std::allocator<T>. 分配的T 类型的内部动态数组现在,我构造了一个U 类型的vector,然后想使用移动语义这样我就可以将它消耗的内存用于T 类型的vector,如下所示:

vector<unsigned> u(512);
// Do something with v.
vector<double> t = std::move(u);
// Do something with t.
// Later, t gets destroyed.

t 的移动构造函数中使用u 的分配器分配的内存,然后使用t 的分配器释放它是否安全?如果是这样,我必须做些什么来确保这个操作是安全的?我猜我应该首先使用u 的分配器为u 的内部数组的每个元素调用allocator.destroy()

【问题讨论】:

    标签: c++ memory-management allocator


    【解决方案1】:

    是的,这是 STL 的目的设计之一,由一个分配器分配的内存可以由另一个分配器释放。这是因为他们希望能够在容器之间交换元素(例如使用list::splice),而无需对其分配器做任何事情。这就是(原因之一)你不能真正拥有有状态分配器的原因。

    【讨论】:

    • C++11 允许有状态的分配器。您只需要定义一些额外的函数 IIRC。
    • @Xeo C++11 再次进行救援。你能提供一个关于如何做到这一点的链接吗?我很想知道。
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多