C++ 如何初始化构造函数初始值设定项列表中“std::unique_ptr”对象的类成员“std::vector”?
我的代码如下所示C++ 如何初始化构造函数初始值设定项列表中“std::unique_ptr”对象的类成员“std::vector”?,c++,initialization,containers,unique-ptr,C++,Initialization,Containers,Unique Ptr,我的代码如下所示 #include <memory> #include <stdint.h> class APodClass { public: int x, y, z; }; class MyClass { public: MyClass(uintmax_t Width, uintmax_t Height) : WIDTH (Width), HEIGTH
#include <memory>
#include <stdint.h>
class APodClass
{
public:
int x, y, z;
};
class MyClass
{
public:
MyClass(uintmax_t Width, uintmax_t Height)
: WIDTH (Width),
HEIGTH (Height),
Field (WIDTH * HEIGTH, nullptr)
{
}
private:
const uintmax_t WIDTH;
const uintmax_t HEIGTH;
std::vector<std::unique_ptr<APodClass>> Field;
};
int wmain(int argc, wchar_t * argv[])
{
MyClass MyObject(1000, 500);
return 0;
}
#包括
#包括
类APodClass
{
公众:
int x,y,z;
};
类MyClass
{
公众:
MyClass(最大宽度、最大高度)
:宽度(宽度),
高度,
字段(宽度*高度,空PTR)
{
}
私人:
常数最大宽度;
const uintmax_t heighth;
std::向量场;
};
int wmain(int argc,wchar_t*argv[])
{
MyClass MyObject(1000500);
返回0;
}
当我试图编译它时,我得到以下错误
Error C2280
'std::unique_ptr<APodClass,std::default_delete<_Ty>>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)': attempting to reference a deleted function
...\visual studio\vc\include\xmemory0 655
错误C2280
'std::unique_ptr::unique_ptr(const std::unique_ptr&'):尝试引用已删除的函数
…\visual studio\vc\include\xmemory0 655
我做错了什么。如何修复此代码?std::unique\u ptr不可复制,因此任何复制元素的构造函数或算法(如
std::generate
)都无法工作:
class MyClass
{
static std::vector<std::unique_ptr<APodClass>> generate(size_t sz)
{
std::vector<std::unique_ptr<APodClass>> result;
result.reserve(sz);
for (size_t i = 0 ; i < sz ; ++i)
result.emplace_back(nullptr);
return result;
}
public:
MyClass(uintmax_t Width, uintmax_t Height)
: WIDTH (Width),
HEIGTH (Height),
Field (generate(WIDTH * HEIGTH))
{
}
...
};
class-MyClass
{
静态std::向量生成(size_t sz)
{
std::向量结果;
结果:储备量(sz);
对于(尺寸i=0;i
std::unique\u ptr不可复制,因此任何复制元素的构造函数或算法(如std::generate
)都无法工作:
class MyClass
{
static std::vector<std::unique_ptr<APodClass>> generate(size_t sz)
{
std::vector<std::unique_ptr<APodClass>> result;
result.reserve(sz);
for (size_t i = 0 ; i < sz ; ++i)
result.emplace_back(nullptr);
return result;
}
public:
MyClass(uintmax_t Width, uintmax_t Height)
: WIDTH (Width),
HEIGTH (Height),
Field (generate(WIDTH * HEIGTH))
{
}
...
};
class-MyClass
{
静态std::向量生成(size_t sz)
{
std::向量结果;
结果:储备量(sz);
对于(尺寸i=0;i
如您所见,您使用的构造函数复制了val
参数
正如您所知,unique\u ptr
是不可复制的。因此,您不能使用复制参数的构造函数
您可以做的是将向量初始化为空。默认初始化已足够,因此根本不需要使用成员初始化列表。要将
n
不可复制的元素添加到空向量中,您可以在MyClass
的构造函数体中使用循环和push_-back
,正如您所看到的,您使用的构造函数会复制val
参数
正如您所知,unique\u ptr
是不可复制的。因此,您不能使用复制参数的构造函数
您可以做的是将向量初始化为空。默认初始化已足够,因此根本不需要使用成员初始化列表。要将n
不可复制的元素添加到空向量中,您可以使用循环,并在MyClass
的构造函数体中push_back