class base {};
class der : public base{};


der d1;
der d2(d1);

该语句调用类库的默认构造函数,然后复制claas der的构造函数。
我的问题是为什么C++在通过复制派生类的另一个对象来创建派生类的对象时没有提供调用基类的副本构造函数的功能

最佳答案

精简版



不,不是。



是的

加长版

我不知道您如何得出结论,即在构造d2时调用了基本默认构造函数,但事实并非如此。如您所料,将调用综合的基本副本构造函数。

这是really easy to test:

struct base {
   base() { cout << "*B"; }
   base(base const& b) { cout << "!B"; }
  ~base() { cout << "~B"; }
};

struct der : base {};

int main() {
   der d1;
   der d2(d1);
}

// Output: *B!B~B~B

10-05 21:10
查看更多