相关疑难解决方法(0)

如何使用已删除的复制构造函数初始化类数组(C++ 11)

关于为什么我不能初始化对象数组(如果它们有私有拷贝构造函数)的现有问题特指C++ 03.我从那个问题中知道我在C++ 03中不允许做什么,但我认为它应该可以在C++ 11中实现

我有一个不可移动的类(称之为Child),我需要在另一个类的构造函数中初始化一个Child数组(称之为Parent)."不可移动"是指在该对象的生命周期内,Child对象的地址必须保持不变.这样做的正确方法是什么?

使用C++ 11,我尝试了以下内容:

class Child
{
public:
    Child (int x) {}
    ~Child () {}

    Child (const Child &) = delete;
};

class Parent
{
public:
    Parent () : children {{5}, {7}} {}

private:
    Child children[2];
};
Run Code Online (Sandbox Code Playgroud)

此代码与Clang 3.5.0编译良好,但GCC 4.9.1抱怨我正在尝试使用已删除的复制构造函数:

test.cc: In constructor ‘Parent::Parent()’:
test.cc:13:35: error: use of deleted function ‘Child::Child(const Child&)’
     Parent () : children {{5}, {7}} {}
                                   ^
test.cc:7:5: note: declared here
     Child (const Child &) = delete;
     ^
Run Code Online (Sandbox Code Playgroud)

我已经读过复制初始化和直接初始化之间的区别(例如这里 …

c++ arrays gcc clang c++11

12
推荐指数
1
解决办法
1378
查看次数

标签 统计

arrays ×1

c++ ×1

c++11 ×1

clang ×1

gcc ×1