std::vector
はどのようにオブジェクトを割り当てますか?それはちょうどstd::allocator::allocate
を使ってメモリのブロックを作成するように思えますが、その後は決してstd::allocate::construct
を呼び出しません。これは本当ですか? std::vector
はメモリだけを割り当て、メモリ割り当てとしてオブジェクトを構築しませんか?std :: vectorはどのようにオブジェクトを割り当てますか?
デフォルトのコンストラクタがない場合はどうなりますか?オブジェクトにデフォルトのコンストラクタがない場合、コンストラクタはどのように呼び出されますか?複数のパラメータがある場合はどうなりますか?
たとえば、このコードではデフォルトのコンストラクタはなく、std :: allocatorで許可されています。
#include <vector>
using namespace std;
class A{
protected:
int m;
public:
explicit A(int a) : m(a) { }
};
int main(){
vector<A> test;
return 0;
}
@Prætorian:この情報源を教えてください。私がちょうど質問に入れたコードは、VS2010でコンパイルすることを示しています。また、gccでコンパイルされると思います。 – chadb
これはC++ 11標準から引用されています – Praetorian
@Prætorian:これは新しいC++ 11ルールですか、それともC++ 03ですか? – chadb