我試圖爲std::vector<char>
使用自定義分配器,但我注意到std::vector
不需要/使用我的分配器中的任何成員函數。這怎麼可能?std :: vector <char>的自定義分配器被忽略
#include <vector>
struct A : private std::allocator<char> {
typedef std::allocator<char> alloc;
using alloc::value_type;
using alloc::pointer;
using alloc::const_pointer;
using alloc::difference_type;
using alloc::size_type;
using alloc::rebind;
// member functions have been removed, since the program compiles without them
};
int main() {
std::vector<char, A> v;
v.resize(4000);
for (auto& c : v)
if (c)
return 1; // never happens in my environment
return 0; // all elements initialized to 0. How is this possible?
}
我正在嘗試使用在線C++ 11編譯器(LiveWorkSpace)提供g ++ 4.7.2,4.8和4.6.3的上述程序。
基本上allocate()
,deallocate()
,construct()
和destroy()
未在我的分配器限定,然而程序編譯,所有的元件將被初始化爲0。
實際上,爲什麼如果用戶提供'std :: allocator'作爲'vector '的分配器,它仍然可以工作?得到編譯器錯誤是否更有意義? –
2013-03-05 13:40:01
我不確定這是否令人滿意,但始終如此。對於其他容器,它更有意義:如果用戶說'std :: map,std :: allocator >>'儘管可以接受它從技術上來說,分配器必須是'std :: allocator >' –
2013-03-05 13:42:56
@AndyProwl - 分配器實際上應該是模板模板參數,但模板模板參數在當時不存在STL(注意:** STL **,不是**標準庫**)被設計,所以'rebind'被創建。 – 2013-03-05 13:48:54