c++ 11中使用initializer_list初始化unique_ptr
Initialize unique_ptr with initializer_list in C++ 11
我目前正在探索新的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());
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- C++初始化基类
- 多成员Constexpr结构初始化
- 复制列表初始化的隐式转换的等级是多少
- 内联映射初始化的动态atexit析构函数崩溃
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 没有用于初始化C++中的变量模板的匹配构造函数
- 在未初始化映射的情况下,将值插入到映射的映射中
- C++成员初始化
- 包含 std::list 的结构体的 C++ 初始化
- 正在初始化:无法从'_Ty*'转换为 List<int,std::分配器<节点<T>>>:节点*
- 在 C 语言中初始化 List<List> 的优雅方式<Coordinate>#
- 为什么不能从初始值设定项列表初始化我的类,即使它派生自 std::list?
- 错误:没有用于初始化'List<double>::node'的匹配构造函数
- 我正在收到错误的“ list :: ShowList”:功能风格的初始化器似乎是我的CPP文件中的函数定义'
- 如何使用给定数量的元素初始化boost::python::list
- 如何从类访问和初始化 std::list
- 我可以使用“brace init list”初始化包含“std::string”字段的结构吗