什么是拷贝构造函数?什么是拷贝构造函数?在什么情况下必须实现拷贝构造函数,请说明理由?

拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。... 拷贝构造函数,是一种特殊的构造函数,它由编译器调用 来完成一些基于同一类的其他对象的构建及初始化。 展开
 我来答
jackwind1987
2013-03-07 · TA获得超过2738个赞
知道大有可为答主
回答量:1268
采纳率:50%
帮助的人:473万
展开全部
什么是拷贝构造函数?

是一种特殊的构造函数,特殊之处在于它有的时候会隐式调用
class A {
public:
A(int x, int y, ...) // 普通构造函数
A(const A&) // 拷贝构造函数,一个参数必须是引用类型
};
当你有个函数

calculate(A a) {...}
你调用的时候
A a_in_main(...) // 调用普通构造函数
calculate(a_in_main); // 这个调用因为是参数是A类型的(不是引用也不是指针),所以要拷贝这个对象,这时就会用a_in_main作为A(const A& other)的参数other,在函数calculate中构造一个新的A类对象。

在什么情况下必须实现拷贝构造函数?

因为你不忽略拷贝构造函数的时候,编译器会给你生成一个按数据位拷贝的一个默认版本,即把类的数据成员直接拷贝到新的对象中。这样如果成员有指针指向动态分配的内存,那么直接拷贝指针就会使两个对象中的指针指向同样的内存,一般情况下这种效果都不是想要的。还有一种说法是深拷贝浅拷贝,编译器给你生成的默认版本就是浅拷贝,不会管你指针指向的是什么,只会给你直接把指针的值复制过去。所以只要你需要深拷贝的时候,才需要实现拷贝构造函数。
帐号已注销
2013-03-07 · TA获得超过219个赞
知道小有建树答主
回答量:499
采纳率:0%
帮助的人:197万
展开全部
拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其唯一的参数(对象的引用)是不可变的(const类型)。此函数经常用在函数调用时用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。

在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”):
1) 一个对象作为函数参数,以值传递的方式传入函数体;
2) 一个对象作为函数返回值,以值传递的方式从函数返回;
3) 一个对象用于给另外一个对象进行初始化(常称为复制初始化);
可以找C++的学习教程看看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式