*
auto_ptr
がこれを許可していませんが、あなたがのためにstd::tr1::shared_ptr
を使用することができますスマートポインタアレイ:
#include <tr1/memory>
std::tr1::shared_ptr<double[]> d(new double[10]);
になりますが、shared_ptrは配列上のdelete
(delete[]
ではなく)を誤って呼び出すことになります。これは望ましくないため、カスタムのDeleterを提供する必要があります。ここ
The answerは、答えはC++ 11のためですが、あなたは、(そのままコピー)が必要になりますコードを提供しています。
template< typename T >
struct array_deleter
{
void operator()(T const * p)
{
delete[] p;
}
};
std::shared_ptr<int> sp(new int[10], array_deleter<int>());
あなたのために、あなたが必要とすることを意味し、どの:
std::tr1::shared_ptr<double> d(new double[10], array_deleter<double>());
スマートポインタ配列内の要素にアクセスするには、まずget()
to dereference the smart pointer to obtain the raw pointerを使用する必要があります。
std::tr1::shared_ptr<double> d(new double[10], array_deleter<double>());
for (size_t n = 0; n < 10; ++n)
{
d.get()[n] = 0.2 * n;
std::cout << d.get()[n] << std::endl;
}
std::unique_ptr<double[]> d(new double[10]); // this will correctly call delete[]
出典
2016-12-17 11:23:27
Tas
*は、これができるように、std::unique_ptr does contain partial specialization for an arrayことは注目に値しますか!あなたは通常どのようにスマートポインタから値を取得しますか? – Lunaweaver