社区
C++ 语言
帖子详情
构造函数初始化与赋值的区别
Uncle_Chesur
2010-10-25 08:41:51
为什么二者的区别的重要性取决于数据成员的类型
...全文
275
11
打赏
收藏
构造函数初始化与赋值的区别
为什么二者的区别的重要性取决于数据成员的类型
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
無_1024
2010-10-25
打赏
举报
回复
初始化一般只有一次 而赋值有很多次
shen124575130
2010-10-25
打赏
举报
回复
初始化是防止垃圾数据,野指针之类的出现,如果要初始化一个有用的值的话效果是一样的,不过初始化只是最开始的那次赋值,而而赋值可以赋N次
qq120848369
2010-10-25
打赏
举报
回复
定义变量的同时写=就是初始化,使用变量的时候写=就是赋值.
浮世尘雲
2010-10-25
打赏
举报
回复
初始化调用的是构造函数,基于未初始化的内存,构造函数在该空闲内存上塑造对象,该空闲内存不间接引用任何资源是构造函数的假设;
赋值调用的是赋值操作符,基于已存在的对象,如果对象在被赋值之前间接引用了任何资源,那么它在被赋值之前,释放这些资源则是赋值操作符的职责。
对已存在的对象调用构造函数则有可能导致该释放的资源得不到释放;
对未初始化的内存使用赋值操作符则有可能导致无效的释放资源动作。
Aaron_Jerry
2010-10-25
打赏
举报
回复
1楼的就不重复说了。
另外,对于类的对象数据成员来说,出于效率的考虑,最好将其放在初始化列表中,此时只需调用该对象的构造函数。而如果将其放在构造函数体内,则需要调用其默认构造函数 和 赋值操作符。
至于类的内置数据成员,放在初始化列表和体内在效率上没什么差别,看个人喜好吧。
无尽大海
2010-10-25
打赏
举报
回复
定义一个对象,可以调用普通构造函数(初始化)、复制构造函数和赋值操作符。其中对于含有const和&的成员,初始化必须使用初始化列表。
对于为什么二者的区别的重要性取决于数据成员的类型,因为如果使用赋值的话,那么这个对象其实已经初始化过了,接着才进行赋值,而直接初始化的话就没那么多事了。所以,如果是内置类型则两者相差不大,如果是自定义类型,那么赋值就慢下来了!
jrkbjx
2010-10-25
打赏
举报
回复
类里面的成员如果是const类型或引用类型在定义时必须初始化,可以使用冒号语法···
lixianmin
2010-10-25
打赏
举报
回复
定义class A {};
A a;
A b= a;
b= a;
构造函数调用完成后总是生成一个新的对象, 也就是说肯定有新的内存分配;赋值操作是将等号右边对象的数值copy到等号左边的对象身上, 这个过程中不会有新的对象生成(我指的是class A的对象);
理解了这一点,区别它们就很简单了: A a;与A b= a;都是调用构造函数,因为它们分别生成了新的对象a, b;而b= a;这一句,并没有新的对象生成,因此是调用了operator= ()
lovesi3344
2010-10-25
打赏
举报
回复
初始化只有一次
第二次就是赋值了
dingshaofengbinbin
2010-10-25
打赏
举报
回复
赋值可是有讲究的:
比如一个对象A
A a=10;
如果对象A中有这样的构造函数:
A(int i)
{
this.i=i;
}
那么上面的赋值就会成功调用的就是上面的构造函数,如果没有这个构造函数的话,上面的赋值是不会成功的。
A b;
A a=b;//调用拷贝构造函数。
jcwKyl
2010-10-25
打赏
举报
回复
就拿常量和引用来说,这两种是必须要放在初始化列表中的,因为在执行到构造函数体的时候,内存已经分配了,此时常量受到段保护不能写,引用本来就不占内存,这个时候只能作废。
所以c++把这些类型的成员初始化放在初始化列表里面去做。
我的一点理解,不一定对。可以看看一些c++经典书上的说法。
构造函数
体
赋值
和
初始化
列表的
区别
本文详细探讨了C++中
构造函数
体内的
赋值
与
初始化
列表的
区别
。
初始化
列表是成员变量
初始化
的标准方式,特别是对于引用、const成员和自定义类型成员。不使用
初始化
列表可能会导致额外的
构造函数
调用和未定义的行为。同时,成员变量的
初始化
顺序由声明顺序决定,而非
初始化
列表中的顺序,因此建议保持两者一致以避免错误。
有关
初始化
列表和
构造函数
赋值
的
区别
本文探讨了C++中
初始化
列表与
构造函数
体内
赋值
的
区别
。
初始化
列表在
构造函数
执行前进行,直接将成员变量
初始化
为其指定值,而
构造函数
体内的
赋值
则会在
初始化
后执行,涉及二次
赋值
,可能影响效率。对于const成员,必须使用
初始化
列表。
构造函数
中参数
初始化
表与函数体
赋值
的
区别
本文介绍了C++
构造函数
中参数
初始化
表与函数体
赋值
的
区别
,强调常数据成员必须通过
初始化
表
初始化
,引用类型同样如此。数据成员为数组时应在函数体
赋值
,静态数据成员需在类外
初始化
。
构造函数
分为
初始化
阶段和函数体
赋值
阶段,静态成员不属于特定对象,不能在
初始化
表中
初始化
。
C++
构造函数
体内
赋值
与
初始化
列表的
区别
本文探讨了C++中
构造函数
与
初始化
列表的正确用法。解释了为什么
初始化
列表中不能使用this指针,并提供了正确的
初始化
方法。同时对比了
初始化
列表与
构造函数
体内
赋值
的
区别
。
构造函数
初始化
列表 与
赋值
的
区别
本文深入探讨了C++中
构造函数
与
赋值
操作的
区别
,特别是针对自定义类型(class)。通过实例演示了
初始化
列表与
赋值
操作的不同,以及它们在效率上的差异。文章详细分析了拷贝构造、构造和拷贝
赋值
函数的调用过程。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章