我正在探索新的c ++ 11功能,我想知道如何使用我在initializer_list中提供的值初始化unique_ptr指向的内存。使用类似" T * data"的原始内存指针,我可以使用uninitialized_copy,但是当我从" T * data"到" unique_ptr数据" (所以我不必做明确的解构)它不起作用。我还在阅读unique_ptr的材料(我的猜测是因为unique_ptr是不可复制的),但是有人可以指出完成这项工作的功能吗?谢谢!
#include <iostream>
#include <memory>
using namespace std;
template<class T>
class Vector
{
private:
unique_ptr<T []> data;
int size;
public:
Vector(initializer_list<T> l)
{
size = l.size();
cout << "Constructing, size is: " << size << endl;
data.reset(new T[size]); // reserve memory
uninitialized_copy(l.begin(),l.end(),data); // not working
//for(int i = 0; i<size; i++ ) // not working -> l has no operator[]
// data[i] = l[i];
}
void Report()
{
for(int i = 0; i<size; i++ )
cout << data[i] << ' ';
cout << '\n';
}
};
int main(int argc, const char *argv[])
{
int a = 1;
Vector<int> v {1,2,3,4};
v.Report();
return 0;
}