2012-01-12 27 views
4

假设我有一个叫vector类维护由std::allocator<T>.现在分配T型的一些内部,动态数组,我构建U类型的vector,后来又希望使用移动语义,这样我可以使用由它占用的内存为Tvector,像这样:使用内存

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

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

回答

2

是的,这是STL的目标设计之一,一个分配器分配的内存可以被另一个分配器解除分配。这是因为他们希望能够在容器之间交换元素(例如使用list::splice),而无需对其分配器执行任何操作。这是(其中一个原因)为什么你不能真正拥有有状态的分配器。

+1

C++ 11允许有状态的分配器。你只需要定义一些额外的功能IIRC。 – Xeo 2012-01-12 05:22:09

+0

@Xeo C++ 11再次救援。你能提供一个关于如何做到这一点的链接?我一定想知道。 – 2012-01-12 05:24:59