にカスタムアロケーターを使用しようとしていましたが、アロケーターのメンバー関数を必要としない/使用しない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?
}
g++ 4.7.2、4.8、および 4.6.3 を提供するオンライン C++11 コンパイラ (LiveWorkSpace) で上記のプログラムを試していました。
基本的allocate()
に 、deallocate()
、construct()
およびdestroy()
はアロケーターで定義されていませんが、プログラムがコンパイルされ、すべての要素が 0 に初期化されます。