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

约翰·林格伦

如果对象具有私有副本构造函数为什么不能初始化对象数组的现有问题具体指的是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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

c ++ 11数组初始化不会调用副本构造函数

来自分类Dev

为什么就地成员初始化在C ++ 11中使用副本构造函数?

来自分类Dev

C ++ 11:带“ = {}”的类内初始化不适用于显式构造函数

来自分类Dev

具有显式构造函数的不可复制类型的C ++ 11数组初始化

来自分类Dev

为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

来自分类Dev

为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

来自分类Dev

如何在C ++ 11的构造函数初始化列表中使用一个公共参数初始化元组的元素?

来自分类Dev

使用默认默认构造函数的C ++ 11值初始化

来自分类Dev

C ++ 11类初始化错误

来自分类Dev

如何在类中初始化C ++ 11本机指针和数组?

来自分类Dev

如何在类中初始化C ++ 11本机指针和数组?

来自分类Dev

C ++ 11在constexpr函数中使用统一值初始化数组

来自分类Dev

C ++ 11在constexpr函数中使用统一值初始化数组

来自分类Dev

C ++ 11构造函数和运算符的统一初始化

来自分类Dev

在构造函数中初始化的c ++ 11线程以执行方法

来自分类Dev

C ++ 11初始化程序列表长度未在隐式构造函数中检查

来自分类Dev

C ++ 11中默认初始化的含义已更改?

来自分类Dev

C ++ 11向量构造函数副本与范围?

来自分类Dev

在类中,数组成员C ++ 11的默认初始化程序

来自分类Dev

C ++ 11是否重新初始化已初始化的成员字段?

来自分类Dev

当parens初始化时,构造函数初始化列表中的C ++ 11大括号初始化为什么不起作用?

来自分类Dev

C ++ 11中类数据成员的默认初始化

来自分类Dev

c ++ 11中的类成员初始化正确完成

来自分类Dev

C ++ 11统一初始化和函数重载

来自分类Dev

C ++ 11中的数组声明和初始化

来自分类Dev

在C ++ 11中对结构数组进行括号初始化

来自分类Dev

C ++ 11中的数组声明和初始化

来自分类Dev

c ++ 11初始化程序列表作为数组

来自分类Dev

具有非静态成员初始化程序的类的C ++ 11聚合初始化

Related 相关文章

  1. 1

    c ++ 11数组初始化不会调用副本构造函数

  2. 2

    为什么就地成员初始化在C ++ 11中使用副本构造函数?

  3. 3

    C ++ 11:带“ = {}”的类内初始化不适用于显式构造函数

  4. 4

    具有显式构造函数的不可复制类型的C ++ 11数组初始化

  5. 5

    为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

  6. 6

    为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

  7. 7

    如何在C ++ 11的构造函数初始化列表中使用一个公共参数初始化元组的元素?

  8. 8

    使用默认默认构造函数的C ++ 11值初始化

  9. 9

    C ++ 11类初始化错误

  10. 10

    如何在类中初始化C ++ 11本机指针和数组?

  11. 11

    如何在类中初始化C ++ 11本机指针和数组?

  12. 12

    C ++ 11在constexpr函数中使用统一值初始化数组

  13. 13

    C ++ 11在constexpr函数中使用统一值初始化数组

  14. 14

    C ++ 11构造函数和运算符的统一初始化

  15. 15

    在构造函数中初始化的c ++ 11线程以执行方法

  16. 16

    C ++ 11初始化程序列表长度未在隐式构造函数中检查

  17. 17

    C ++ 11中默认初始化的含义已更改?

  18. 18

    C ++ 11向量构造函数副本与范围?

  19. 19

    在类中,数组成员C ++ 11的默认初始化程序

  20. 20

    C ++ 11是否重新初始化已初始化的成员字段?

  21. 21

    当parens初始化时,构造函数初始化列表中的C ++ 11大括号初始化为什么不起作用?

  22. 22

    C ++ 11中类数据成员的默认初始化

  23. 23

    c ++ 11中的类成员初始化正确完成

  24. 24

    C ++ 11统一初始化和函数重载

  25. 25

    C ++ 11中的数组声明和初始化

  26. 26

    在C ++ 11中对结构数组进行括号初始化

  27. 27

    C ++ 11中的数组声明和初始化

  28. 28

    c ++ 11初始化程序列表作为数组

  29. 29

    具有非静态成员初始化程序的类的C ++ 11聚合初始化

热门标签

归档