C++关于类的复制函数问题

来源:互联网 发布:matlab mac 激活 编辑:程序博客网 时间:2024/05/17 03:06

在C++中,复制构造函数不可以使用形参,必须使用实参。这是因为如果用形参,编译器会生成一个临时的实参变量用于赋值,而它本身就要用到这个构造函数。假如通过了编译,也会造成死循环。比如:

class A{public:A(A temp){// . . .}/* . . . */};
编译器 Visual Studio 2012 会提示Error:类“A”的复制构造函数不能带有“A”类型的参数。

如果修改为:

class A{public:A(A &temp){// . . .}/* . . . */};

就不会有任何问题了。

另外,不能使用如下代码:

class A{public:A(A &temp){*this = temp;}/* . . . */A operator = (A temp){// . . .return *this;}};

它的主要问题是调用了复制赋值运算。

实际上,把赋值的代码放在复制构造函数中,把下面的代码删去也没问题。

0 0