我正在阅读复制构造函数以及它们通常将参数作为常量引用接收的方式。 Why should the copy constructor accept its parameter by reference in C++? 我写了一段代码片段来测试,当按值接收参数时,是否创建副本(如提供的链接的接受答案中所述)。 但是,当按值接收对象时,我看不到构造函数。 请解释为什么?并且不是通过值返回对象时创建的副本?再也没有构造函数在那里调用。为什么?为什么构造函数在值传递时没有被调用
class Vector
{
public:
Vector(){cout << "Vector constructor"<<endl;}
~Vector(){cout << "Vector destructor"<<endl;}
};
Vector use(Vector z)
{
cout << "At call" << endl;
Vector v;
cout << "after definition" << endl;
return v;
}
int main()
{
Vector t;
cout << "After irrelevant" << endl;
use(t);
cout << "After use"<< endl;
}
的输出如下:
Vector constructor
After irrelevant
At call
Vector constructor
after definition
Vector destructor
Vector destructor
After use
Vector destructor
UPDATE1:我已经错过了最初的例子添加拷贝构造函数。一旦完成,代码将按预期行事。
你没有拷贝构造函数。内置的不会打印任何东西;) –
复制构造函数在通过值传递时调用,而不是正常的构造函数。 – owacoder
我的不好,在同一个程序中有很多其他代码..模拟它:)将添加并再次测试 –