1、问题一:拷贝构造函数的形参是否可以是值传递,为什么?
#include<iostream>
using namespace std;
class A
{
public:
A()
{
cout << "in constructor" << endl;
}
A(A test)
{
this->a = test.a;
cout << "in copy constructor" << endl;
}
private:
int a;
};
int main(void)
{
A a;
A b(a);
return 0;
}
运行结果:
可以看到如下结果,编译器阻止了我们的行为。所以结论是不能。但是原因是什么呢?原因就是当我们以值传递的方式进行操作是,这时以值传递的方式又会触发拷贝构造行为,自己调用自己,最后会发生栈溢出。所以不能使用值传递。那么是否可以使用指针传递呢,网上有人说能?有人说不能?接下来让我们一探究竟
root@ubuntu:/home/qpz# g++ gouzao.cpp
gouzao.cpp:12:10: error: invalid constructor; you probably meant 鈥楢 (const A&)鈥
A(A test)
^
root@ubuntu:/home/qpz#
问题二:拷贝构造函数能够用指针作为参数?
#include<iostream