如果对象具有私有副本构造函数,为什么不能初始化对象数组的现有问题?具体指的是C ++ 03。从这个问题中我知道,我想做的事情在C ++ 03中是不允许的,但是我认为在C ++ 11中应该可以
我有一个不可移动的类(称为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];
};
这段代码可以使用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;
^
我已经了解了复制初始化和直接初始化之间的区别(例如,在这里和这里),并且我想避免通过使用直接初始化来调用复制构造函数。我的语法有误吗?这是GCC中的错误吗?还是我试图做的只是不可能?
我同意这似乎是GCC错误(报告为63707)的评论。
仅当数组中的类型具有用户定义的析构函数时,编译失败,这对我来说没有意义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句