关于 Why can't I initialise an array of objects if they have private copy constructors? 的现有问题特指C++03。我从那个问题中知道我正在尝试做的事情在 C++03 中是不允许的,但我认为在 C++11 中应该是可能的
我有一个不可移动的类(称为子类),我需要在另一个类的构造函数中初始化一个子类数组(称为父类)。 “不可移动”是指子对象的地址在该对象的生命周期内必须保持不变。这样做的正确方法是什么?
使用 C++11,我尝试了以下方法:
class Child
{
public:
Child (int x) {}
~Child () {}
Child (const Child &) = delete;
};
class Parent
{
public:
Parent () : children {{5}, {7}} {}
private:
Child children[2];
};
这段代码在 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;
^
我已经了解了复制初始化和直接初始化之间的区别(例如 here 和 here),并且我想避免使用直接初始化来调用复制构造函数。我的语法错了吗?这是 GCC 中的错误吗?还是我试图做的事情是不可能的?
最佳答案
我同意这似乎是 GCC 错误(报告为 63707)的评论。
只有当数组中的类型有用户定义的析构函数时才会编译失败,这对我来说没有意义。
关于c++ - 如何使用已删除的复制构造函数初始化类数组(C++11),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26685551/