2012-01-12 93 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