の動作についてはまだ混乱していますstd::vector::resize()
。次のコードを検討してください ( std::vector<type> の型要件も参照してください) 。
struct A {
A() : X(0) { std::cerr<<" A::A(); this="<<this<<'\n'; }
A(A const&) { assert(0); } // is required but doesn't fire in vector::resize
int X;
};
int main()
{
std::vector<A> a;
a.resize(4); // would not compile without A::A(A const&) or A::A(A&&)
}
A::A(A const&)
またはがないA::A(A&&)
と、 の行a.resize(4);
はコンパイルされません。ただし、そのコンストラクターは決して呼び出されassert(0)
ません: は起動しません! 誰かが私にそれを説明できますか?
allocator_traits<>
私の解釈では、これらのコンストラクターのいずれかの存在は(used by )のテンプレート マジックによって必要とされますstd::vector::resize()
が、実際には呼び出されません。ただし、メソッドを呼び出していないのに、なぜメソッドの存在が必要になるのでしょうか?