问答详情
源自:6-6 管理内存:向函数中传入一个对象

对于将 test3 改为 test3(Data data) 问题的描述,似乎不妥。

对于将 test3 改为 test3(Data data) 问题的描述,似乎不妥。


/*

编译错误:Copy constructor must pass its first argument by reference


参数列表中,若写的是一个对象,则在传参时,将调用其拷贝构造函数,那么问题就会出现:

我们将要调用的这个函数,就是拷贝构造函数,

所以,若在参数列表中,写一个对象的话,则在传参时,就会又调用一次拷贝构造函数,

然后在调用,从而陷入无限循环中去。

*/

Data(Data data);


上述「我们将要调用的这个函数,就是拷贝构造函数」是什么鬼?

说的是 test3(const Data& data) 吗?

先不说它根本就不是一个拷贝构造函数,仅仅是长得像而已。

这里你已经假设把 test3 改为了 test3(Data data) ,哪来的拷贝构造函数?

如果不是的话,那么「我们将要调用的这个函数,就是拷贝构造函数」,

是意思是在 test3(Data data) 函数体中调用 Data 的「拷贝构造函数」吗?


提问者:梨多情 2024-07-26 12:45

个回答