web-dev-qa-db-ja.com

C ++ 11には、Boostのscoped_arrayのような動的に割り当てられた配列のラッパーがありますか?

私はしばしばC++で動的に割り当てられた配列を処理する必要があるため、scoped_array、shared_arrayなどをBoostに依存しています。 StroustrupのC++ 11 FAQ および C++ 11リファレンスWiki を読んだ後、Cによって提供されるこれらの動的配列ラッパーの適切な代替品を見つけることができませんでした。 ++ 11標準。見落としていることがありますか、それともBoostに依存し続ける必要がありますか?

手伝ってくれてありがとうございます!

28
void-pointer

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[]>());
48
Inbae Jeong

ベクトルが配列ラッパーとして意図されている限り、ベクトルを内部オブジェクトとして使用する適切なスマートポインターを使用するとどうなりますか?

0
Yury Schkatula