使用C ++ 11中的initializer_list初始化unique_ptr

时间:2014-08-01 21:01:53

标签: c++ c++11

我正在探索新的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;
}

1 个答案:

答案 0 :(得分:4)

只需使用getter

std::copy(l.begin(),l.end(),data.get());