为什么不执行拷贝构造函数呢?
看下面的程序, 为什么结果是
base(42)
derived(42)
~derived(42)
~base(42), 而不执行拷贝构造函数呢?, 但是当把
最后一个语句derived d = make_derived();
换成
Derived d1(42);
derived d = d1;
就会执行拷贝构造函数了
#include <iostream>
#include <vector>
class base
{
public:
base(int value):value_(value) { std::cout << "base(" << value << ")\n"; }
base():value_(0) { std::cout << "base()\n"; }
base(base const& copy)
:value_(copy.value_)
{ std::cout << "copy base(" << value_ << ")\n"; }
~base() { std::cout << "~base(" << value_ << ")\n"; }
int value() const { return value_; }
private:
int value_;
};
class derived : public base
{
public:
derived(int value): base(value) { std::cout << "derived(" << value << ")\n"; }
derived() : base() { std::cout << "derived()\n"; }
derived(derived const& copy)
: base(copy)
{ std::cout << "copy derived(" << value() << "\n"; }
~derived() { std::cout << "~derived(" << value() << ")\n"; }
};
derived make_derived()
{
return derived(42);
}
int main()
{
derived d = make_derived();
}