1

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

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

4

3 回答 3

3

您不能 - 当您提供自己的构造函数时,编译器会关闭其自动生成的一些默认构造函数,因此您可以防止以这种方式默认构造某些类。但是,我认为 C++0x 将允许您明确声明默认编译器实现,例如:

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

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

于 2010-04-27T14:08:33.013 回答
2

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

仅当您未声明构造函数时才提供无参数构造函数。所以除非你想要一个无参数的构造函数,否则你没有问题,但认为写一个是浪费时间。

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

于 2010-04-27T14:15:51.333 回答
1

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

class yourClass
{
    public:
       yourClass(){}
}
于 2010-04-27T14:15:40.217 回答