如何处理所需的默认构造函数

Ano*_*ous 8 c++

在为我的一个类(包含其他UDT的一些对象)编写一个复制构造函数时,我需要为这些UDT创建一个默认构造函数,即使它们从来没有真正意图拥有一个.

是否可以实现一个空白的默认构造函数并完成它?调用默认构造函数的唯一时间是在复制期间,创建对象时,然后将相应对象的值复制到其中.因此,在默认构造函数中分配给对象的任何值都将永远不会被使用.

我看到的问题是一些成员变量没有在一个空的默认构造函数中初始化.我应该只写一个给出虚拟值的东西吗?还有其他推荐的方法吗?

编辑:我知道如果我要为其他类定义复制构造函数,复制构造函数不需要默认构造函数,但我没有,所以它确实需要它.

mrk*_*rkj 5

如果在复制构造函数中使用初始化列表,则不需要默认构造函数:

#include <iostream>
using namespace std;
class Foo {
  Foo();            /* no default constructor */
public:
  Foo(int i)        { cout << "Foo constructor (int)"  << endl; }
  Foo(const Foo& f) { cout << "Foo constructor (copy)" << endl; }
};
class Bar {
  Foo f;
public:
  Bar()             : f(1)   { cout << "Bar constructor (default)" << endl; }
  Bar(const Bar& b) : f(b.f) { cout << "Bar constructor (copy)"    << endl; }
};
int main(void) {
  Bar b;
  Bar b_=b;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果是:

Foo constructor (int)
Bar constructor (default)
Foo constructor (copy)
Bar constructor (copy)
Run Code Online (Sandbox Code Playgroud)