问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

拷贝构造函数

发布网友 发布时间:2022-04-23 15:58

我来回答

2个回答

热心网友 时间:2023-08-16 12:45

拷贝构造函数,经常被称作X(X&),是一种特殊的构造函数,他由编译器调用来完成一些基于同一类的其他对象的构件及初始化。它的唯一的一个参数(对象的引用)是不可变的(因为是const型的)。这个函数经常用在函数调用期间于用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。
在C++中,下面三种对象需要拷贝的情况。因此,拷贝构造函数将会被调用。
1). 一个对象以值传递的方式传入函数体
2). 一个对象以值传递的方式从函数返回
3). 一个对象需要通过另外一个对象进行初始化
以上的情况需要拷贝构造函数的调用。如果在前两种情况不使用拷贝构造函数的时候,就会导致一个指针指向已经被删除的内存空间。对于第三种情况来说,初始化和赋值的不同含义是构造函数调用的原因。事实上,拷贝构造函数是由普通构造函数和赋值操作赋共同实现的。描述拷贝构造函数和赋值运算符的异同的参考资料有很多。
拷贝构造函数不可以改变它所引用的对象,其原因如下:当一个对象以传递值的方式传一个函数的时候,拷贝构造函数自动的被调用来生成函数中的对象。如果一个对象是被传入自己的拷贝构造函数,它的拷贝构造函数将会被调用来拷贝这个对象这样复制才可以传入它自己的拷贝构造函数,这会导致无限循环。
除了当对象传入函数的时候被隐式调用以外,拷贝构造函数在对象被函数返回的时候也同样的被调用。换句话说,你从函数返回得到的只是对象的一份拷贝。但是同样的,拷贝构造函数被正确的调用了,你不必担心。
如果在类中没有显式的声明一个拷贝构造函数,那么,编译器会私下里为你制定一个函数来进行对象之间的位拷贝(bitwise copy)。这个隐含的拷贝构造函数简单的关联了所有的类成员。许多作者都会提及这个默认的拷贝构造函数。注意到这个隐式的拷贝构造函数和显式声明的拷贝构造函数的不同在于对于成员的关联方式。显式声明的拷贝构造函数关联的只是被实例化的类成员的缺省构造函数除非另外一个构造函数在类初始化或者在构造列表的时候被调用。
拷贝构造函数是程序更加有效率,因为它不用再构造一个对象的时候改变构造函数的参数列表。设计拷贝构造函数是一个良好的风格,即使是编译系统提供的帮助你申请内存默认拷贝构造函数。事实上,默认拷贝构造函数可以应付许多情况。

热心网友 时间:2023-08-16 12:45

将this指针地址打印出来
构造 30 40
after construate p1:0x0012FF6C
拷贝构造 from:0x0012FF6C this:0x0012FEF0 30 40
in test fun x:0x0012FEF0 30 40
拷贝构造 from:0x0012FEF0 this:0x0012FF58 30 40
析构 this:0x0012FEF0 30 40
析构 this:0x0012FF58 30 40
拷贝构造 from:0x0012FF6C this:0x0012FEF0 30 40
in test fun x:0x0012FEF0 30 40
拷贝构造 from:0x0012FEF0 this:0x0012FF64 30 40
析构 this:0x0012FEF0 30 40
after test
析构 this:0x0012FF64 30 40
析构 this:0x0012FF6C 30 40
拷贝构造发生的地方在:
test(p1) p1传入的时候
test()中x return的时候
point p2(test(p1)); p1传入的时候
p2构造函数中。
缺少了的是第二次return x的时候。
为什么会少呢? 请注意拷贝构造函数的参数,是引用&p. C++在传递引用参数的时候是不会调用拷贝构造函数的,而直接将参数的引用传入。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
桃李芬芳的近义词是? 请会答正确。 急... 墨西哥很混乱吗 为什么我的OPPOR9手机连接到任何蓝牙设备放歌曲,都没有办法在蓝牙设备... OPPOA9如何连接酷狗与手机蓝牙? 华为荣耀3X 白色畅玩版的声音调至最大声仍很小声 荣耀3x刷机后卸载了一些系统软件,然后就无法开机,一直停留在开机界面... 平安富赢金生年金保险值得买吗?最全产品测评! 收音机音量旋钮音量最大还是小 德生pl_450收音机音量电位器声音惑大惑小,电位器的型号是什么_百度知 ... 浙江金融学院有什么专业 请问DelPhi中copy函数用法 想找这张图片的竖屏,用来做手机壁纸? string类 copy函数 XP屏保求美女名字或她的图片 EXCEL里如何复制函数? 关于C内存拷贝函数的问题 memcpy 谁知道电脑桌面屏保上这个女的是谁? 在EXCEL表中如何复制函数? 这种在屏幕底下的美女壁纸 C中字符串拷贝函数strcpy和内存拷贝函数memcpy的区别与实现 什么是c++字符串拷贝函数 求一个屏保,是一个美女,动态的,在做一些动作。超可爱 笔记本桌面屏保 就要图片中这个美人儿的··· C++里面的构造函数,拷贝函数,赋值函数,菜鸟求解 C++中怎么拷贝构造函数(格式及相关符号的意识分别是什么)并且拷贝函数的作用是什么 求一屏保美女图片!很常见的那个! 拷贝构造函数的作用 什么是构造拷贝函数,初学者,求详细简单的讲解 苹果xsmax充电52不充了再充十几分钟到90了怎么回事? c++中的拷贝函数是怎么回事 求漂亮的电脑屏保,适合女孩子用的。谢谢。我的邮箱是1213417315@qq.com. 想要找一些电脑屏保的图片自己设置屏保,什么样子的图片比较好啊? QQ空间相册提示:图片涉嫌违规 已禁止访问怎样恢复正常状态? QQ空间被禁止访问了怎么办 如果对方QQ空间设置了禁止访问怎样可以访问了 要怎么解除QQ空间禁止访问啊 手机QQ空间禁止他人访问我的访客的设置在哪里? 怎样避免米饭糊锅? 怎么做能使米饭不糊? 米饭怎么不糊 如何蒸米饭不糊底 米饭怎样蒸不糊锅? 怎么做米饭不会糊,不会有锅巴 怎样做米饭不会糊底妙招 怎样做米饭不会糊 电饭锅煮米饭怎么才能不粘(糊)锅? 电饭锅煮米饭怎么不糊锅 蒸米饭怎样不糊锅 为什么地球上会有地震?地震的形成原理你知道多少? 地震的发生机制是什么?