c++ 11中使用initializer_list初始化unique_ptr

Initialize unique_ptr with initializer_list in C++ 11

本文关键字:list 初始化 unique ptr initializer c++      更新时间:2023-10-16

我目前正在探索新的c++11功能,我想知道如何初始化由unique_ptr指向的内存,我在initializer_list中提供的值。对于像"T* data"这样的原始内存指针,我可以使用uninitialized_copy,但是当我从"T* data"更改为"unique_ptr data"时(因此我不必进行显式解构),它不起作用。我仍然在阅读关于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;
}

直接使用getter:

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