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