代码之家  ›  专栏  ›  技术社区  ›  Itay Moav -Malimovka

如何使编译器在C++中创建默认构造函数?

  •  1
  • Itay Moav -Malimovka  · 技术社区  · 14 年前

    即使我提供了自己的显式构造函数,也有办法让编译器创建默认构造函数吗?

    有时我发现它们非常有用,并且发现编写复制构造函数是浪费时间,特别是对于大型类。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Steve Jessop    14 年前

    无论您是否定义任何其他构造函数,都会提供复制构造函数。只要不声明复制构造函数,就可以得到一个。

    只有在未声明构造函数的情况下才提供无参数构造函数。因此,除非您想要一个无参数构造函数,否则您不会遇到问题,但认为编写一个构造函数是浪费时间。

    Irc,c++0x有一种将构造委托给另一个构造函数的方法。我记不清细节,但它允许您通过指定另一个构造函数以及要传递给它的参数来定义无参数构造函数。在某些情况下可能会节省键入某些数据成员初始值设定项的时间。但是默认的no-arg构造函数也不会提供这些初始化器。

        2
  •  3
  •   AshleysBrain    14 年前

    你不能-编译器在你提供自己的默认构造函数时会关闭一些自动生成的默认构造函数,这样你就可以阻止默认的类构造。但是,我认为C++0x将允许显式地声明默认编译器实现,例如:

    MyClass() = default;  // 'delete' also allowed by upcoming standard to disable
    

    我不认为任何编译器支持这个-C++0x(因为下一个标准已经知道)还不是最终的,所以现在你只需要做你的默认构造函数。代码不多! MyClass() {} 只要所有成员本身都是默认可构造的,就可以。

        3
  •  1
  •   Itay Moav -Malimovka    14 年前

    编译器将始终生成默认的复制构造函数,除非您提供自己的复制构造函数定义。您的问题只是默认的无参数构造函数,如果存在任何构造函数定义,则不会生成该构造函数。但不难提供与生成的构造函数行为完全相同的参数构造函数:

    class yourClass
    {
        public:
           yourClass(){}
    }