对象引用和对象指针
在复制构造函数的情况下,如果我在参数中使用指针而不是引用变量,会发生什么?例如。
class MyClass
{
private: int a;
char *str;
public:...
...
MyClass(MyClass *pObj)
{
....
....
}
};
What happens, in case of copy constructor, if I use pointer in the parameter instead of reference variable? for ex.
class MyClass
{
private: int a;
char *str;
public:...
...
MyClass(MyClass *pObj)
{
....
....
}
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不是复制构造函数,它是重载构造函数。
复制构造函数引用与参数相同的类型。前任:
如果您不提供自己的版本,编译器会隐式为您的类生成一个复制构造函数。
当编译器需要生成对象的副本时,将调用此复制构造函数。
上面所说的重载构造函数只有在显式调用时才会被调用。
代码示例:
请注意输出为:
Is not a Copy Constructor, it is an Overloaded Constructor.
The copy constructor takes reference to the same type as argument. Ex:
The compiler generates an copy constructor for your class implicitly if you do not provide your own version.
This copy constructor will be called when compiler needs to generate a copy of an object.
The overloaded constructor said above will only be called when you explicitly call it.
Code Sample:
Note the output is:
根据定义,复制构造函数是具有指向同一类的 const 引用参数的构造函数。
任何其他构造函数定义都不是“复制构造函数”,因此当您编写以下内容时,编译器不会调用它:
或
By definition, a copy constructor is a constructor with a const reference parameter to the same class.
Any other constructor definition is not a "copy constructor", so it won't be invoked by the compiler when you write something like:
or
复制构造函数应该从对象而不是指针复制。
为什么按引用传递而不是按值传递?因为如果不这样做,复制构造函数将创建参数的副本,这将是一个无限循环。
Copy constructor is supposed to make a copy from an object and not from pointer.
Why pass by Reference and not by value? Because if you don't do so, the copy constructor will go in creation of the copy of the argument and it will be an endless loop.