auto_ptr
이 auto_ptr
비록
이 허용하지 않는 배열 *에 대한 전문화를 포함하지 않는 한 당신은 std::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