当前位置:  开发笔记 > 编程语言 > 正文

使用已删除的复制构造函数和初始化列表重载调用类定义中的成员构造函数

如何解决《使用已删除的复制构造函数和初始化列表重载调用类定义中的成员构造函数》经验,为你挑选了1个好方法。

为了使初始化起作用,有问题的类型必须是MoveConstructible *.在您的特定情况下,提供移动构造函数将满足此要求:

Foo(Foo&&) = default;

如果这不是一个选项,您可以在默认构造函数中初始化该成员,并将其用作其他构造函数中的委托构造函数.

struct Bar
{
    Bar() : f(1, 2) {}
    Bar(const FooBar&) : Bar() {}
    Bar(double x) : Bar() {}
    Foo f;
};

*这并不意味着将制作副本.T t = T()是复制省的一个容易的候选人.但是,必须可以访问可行的构造函数.



1> juanchopanza..:

为了使初始化起作用,有问题的类型必须是MoveConstructible *.在您的特定情况下,提供移动构造函数将满足此要求:

Foo(Foo&&) = default;

如果这不是一个选项,您可以在默认构造函数中初始化该成员,并将其用作其他构造函数中的委托构造函数.

struct Bar
{
    Bar() : f(1, 2) {}
    Bar(const FooBar&) : Bar() {}
    Bar(double x) : Bar() {}
    Foo f;
};

*这并不意味着将制作副本.T t = T()是复制省的一个容易的候选人.但是,必须可以访问可行的构造函数.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有