シンプルなテンプレートのarraylistクラスを作成したいのですが、次のようなことをすると
T* typeArray = new T[10];
これにより、オブジェクトのインスタンスが 10 個作成され、コンストラクターが 10 回呼び出されます。後でオブジェクトを配置できる場合、空の配列を作成するにはどうすればよいですか?
これは C++ での推奨される方法ではありませんが、
T* my_array = (T*)malloc(10 * sizeof(T));
標準的な C++ の慣例に沿った解決策は次のとおりです。
std::vector<T> my_vector;
my_vector.reserve(10);
(コメントでほのめかされているように)ソリューションreserve
は、それ以上のアクションなしでは無効であるという点で異なりますが、my_vector[5]
有効ですmy_array[5]
。その後my_vector.resize(10)
、インデックスを作成するために次のようなものが必要になります。これにより、10 個のアイテムすべてが構築されます。push_back(T const&)
またはを実行することで、それらを前後に構築できますemplace_back(Args...&& args)
。このように構築された後にのみ、[]
インデックス作成が有効になります。警告として、[]
インデックス作成は違法な場合でも機能する可能性がありますが、それは未定義の動作です。