如果在复制构造函数的情况下,如果我在参数中使用指针而不是引用变量,会发生什么?对于前
class MyClass
{
private: int a;
char *str;
public:...
...
MyClass(MyClass *pObj)
{
....
....
}
};
答案 0 :(得分:4)
MyClass(MyClass * pObj)
不是复制构造函数,它是重载的构造函数。
复制构造函数引用与参数相同的类型。例如:
MyClass(MyClass&)
如果您不提供自己的版本,编译器会隐式为您的类生成一个复制构造函数。 当编译器需要生成对象的副本时,将调用此复制构造函数。
上面说的重载构造函数只有在你明确调用它时才会被调用。
#include<iostream>
class MyClass
{
private: int a;
char *str;
public:
MyClass(){}
MyClass(MyClass *pObj)
{
std::cout<<"\ninside *";
}
MyClass(MyClass &pObj)
{
std::cout<<"\ninside &";
}
void doSomething(MyClass obj)
{
std::cout<<"\ndoSomething";
}
};
int main()
{
MyClass ob,ob2;
MyClass obj2(&ob); //Explicitly invoke overloaded constructor
ob.doSomething(ob2); //Calls copy constructor to create temp copy of object
return 0;
}
请注意输出为:
inside *
inside &
doSomething
答案 1 :(得分:1)
根据定义,复制构造函数是具有同一类的const引用参数的构造函数。 任何其他构造函数定义都不是“复制构造函数”,因此当您编写类似的东西时,编译器不会调用它:
MyClass x = y;
或
MyClass x( y );
答案 2 :(得分:0)
复制构造函数应该从对象而不是从指针复制 为什么通过参考而不是价值?因为如果你不这样做,拷贝构造函数将创建参数的副本,它将是一个无限循环。