2013-03-04 97 views
1

我正在尝试使用std::unique_ptr删除程序。这是我的代码:unique_ptr与删除程序

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: '无效的std ::矢量< _Ty> ::的push_back(标准::的unique_ptr & &)':无法从“STD转换参数1 ::的unique_ptr < _Ty,_Dx>”到 '的std ::的unique_ptr < _Ty> & &'

编译器:VC++ 2012我怎样才能解决这个问题?我的目标是将unique_ptr与定制删除程序一起使用,该程序调用delete[]而不是默认delete

+0

任何理由你不使用'矢量'或'矢量>':所以,你应该为你的申报载体? – 2013-03-04 09:30:11

回答

7

没有必要,因为unique_ptr已经知道数组了!

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

数组专业化甚至给你类似数组的访问&agrave; LA 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;