2013-03-04 4 views
1

나는 deleter와 함께 std::unique_ptr을 사용하려고합니다.unique_ptr with deleter

template<class T> 
struct Deleter 
{ 
    void operator()(T* p) 
    { 
     delete[] p; 
    } 
}; 

void Test() 
{ 
    vector<unique_ptr<char>> v; 

    for(size_t i = 0; i < 5; ++i) 
    { 
     char* p = new char[10]; 
     sprintf(p, "string %d", i); 
     v.push_back(unique_ptr<char, Deleter<char>>(p)); // error is here 
    } 
} 

오류 C2664 : 이것은 내 코드는 '무효 표준 : : 벡터 < _Ty> ::와 push_back (표준 : & & unique_ptr)'표준 '에서 매개 변수 1 변환 할 수 없습니다 : < unique_ptr _Ty, _Dx> '에서'표준 :: unique_ptr < _Ty> & & '

컴파일러 : VC++ 2012 년 나는이 문제를 해결할 수있는 방법? 내 목표는 대신 을 호출하는 사용자 정의 삭제자를 사용하여 unique_ptr을 사용하는 것입니다.

+0

어떤 이유 : 따라서, 당신은 당신의 벡터를 선언해야? –

답변

7

unique_ptr은 이미 배열에 대해 알고 있기 때문에 필요 없습니다!

std::unique_ptr<char[]> p(new char[10]); 
sprintf(p.get(), "..."); 

배열 전문화를 통해 배열과 같은 액세스 및 예기치를 제공 할 수도 있습니다. 라 p[0] = 'a';

귀하의 벡터 형식은 물론, 일치해야합니다 : std:vector<std::unique_ptr<char[]>>

3

unique_ptr<char>unique_ptr<char, Deleter<char>> 두 가지 종류가 있습니다. 당신은`벡터 `또는`벡터 >을 '사용하지 않는

vector<unique_ptr<char, Deleter<char>>> v;