私はしばしばC++で動的に割り当てられた配列を処理する必要があるため、scoped_array、shared_arrayなどをBoostに依存しています。 StroustrupのC++ 11 FAQ および C++ 11リファレンスWiki を読んだ後、Cによって提供されるこれらの動的配列ラッパーの適切な代替品を見つけることができませんでした。 ++ 11標準。見落としていることがありますか、それともBoostに依存し続ける必要がありますか?
手伝ってくれてありがとうございます!
unique_ptr
のように、unique_ptr<T[]>
の特殊化があります。
#include <iostream>
#include <memory>
struct test
{
~test() { std::cout << "test::dtor" << std::endl; }
};
int main()
{
std::unique_ptr<test[]> array(new test[3]);
}
実行すると、このメッセージが表示されます。
test::dtor
test::dtor
test::dtor
shared_ptr
を使用する場合は、std::default_delete<T[]>
のようなものがないため、削除にはshared_ptr<t[]>
を使用する必要があります。
std::shared_ptr<test> array(new test[3], std::default_delete<test[]>());
ベクトルが配列ラッパーとして意図されている限り、ベクトルを内部オブジェクトとして使用する適切なスマートポインターを使用するとどうなりますか?