我试图使用自定义分配器std::vector<char>
,但我注意到std::vector
不需要/使用我的分配器中的任何成员函数。这怎么可能?
#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。