社区
C++ 语言
帖子详情
构造函数初始化与赋值的区别
Uncle_Chesur
2010-10-25 08:41:51
为什么二者的区别的重要性取决于数据成员的类型
...全文
237
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++ Primer中在讲
构造函数
初始化
列表的时候有这么一段话:无论是在
构造函数
初始化
列表中
初始化
成员,还是在
构造函数
体中对它们
赋值
,最终结果是相同的。不同之处在于,使用
构造函数
初始化
列表的版本
初始化
数据成员,没有定义
初始化
列表的
构造函数
版本在
构造函数
体中对数据成员
赋值
。 请问这里的
初始化
数据成员与对数据成员
赋值
的含义是什么?有什么
区别
? 我知道在数据成员有默认
构造函数
时是有不同的,但对其他类型的成员呢?其他类型成员的
初始化
和
赋值
有
区别
吗?==================================================================
C++
构造函数
初始化
列表与
赋值
C++类中成员变量的
初始化
有两种方式:
构造函数
初始化
列表和
构造函数
体内
赋值
。
初始化
列表对成员变量做的事情叫做
初始化
,而
构造函数
体内对成员变量做的事情就叫做
赋值
了。 整个
构造函数
的执行过程包括(
初始化
列表以及
构造函数
体内)都属于该对象
初始化
的过程
初始化
早于
赋值
,它是随着对象的诞生一起进行的。而
赋值
是在对象诞生以后又给予它一个新的值。 c++在哪些情况下只能使用
初始化
列表而不能用
赋值
1-如果类存在继承关系,派生类必须在其
初始化
列表中调用基类的
构造函数
) 2-需要
初始化
const修饰的类成员
C++
构造函数
初始化
列表和
构造函数
函数体内
赋值
C++
构造函数
初始化
列表和
构造函数
函数体内
赋值
大多数情况下
构造函数
初始化
列表和
构造函数
函数体内
赋值
的效果是一样的,const常量和引用只能使用
构造函数
的
初始化
列表的方式进行
初始化
class A { public: A(int& a, int b, int c): _a(a),_b(b),_c(c) { //_a = a; //错误,引用必须在
初始化
列表中
初始化
//_b = b; //错误,const成员变量必须在
初始化
列表中
初始化
_c = c; //正确,和在
初始化
列
C++
构造函数
用
初始化
列表进行
初始化
和
构造函数
体内
赋值
进行
初始化
的
区别
?
C++
构造函数
用
初始化
列表进行
初始化
和
构造函数
体内
赋值
进行
初始化
的
区别
?
构造函数
初始化
列表和
构造函数
体最大的
区别
是
初始化
列表是
初始化
,而函数体内是
赋值
操作; 对于普通的数据类型两种操作只有资源消耗的
区别
。但引用和const常量都是不能被
赋值
的,它们在类内只能在
构造函数
的参数
初始化
列表中被
初始化
。 对于对引用变量和const变量的
初始化
问题: 在进入
构造函数
体内时,实际上变量都已经
初始化
完毕了,即引用变量和const变量都已经用不确定的值
初始化
好了,
构造函数
内能做的只有
赋值
,而const类型和引
构造函数
初始化
列表和
构造函数
内
赋值
参考自大佬 详情 对于内置数据类型,
构造函数
初始化
列表和
构造函数
内
赋值
是基本一样的。 但是对于结构体类型和自定义类类型,
初始化
列表更好。当使用
初始化
列表构造对象的时候,
初始化
一次就完成了;如果使用
构造函数
内
赋值
,要调用两次
构造函数
,第一次使用默认值
初始化
,第二次调用使用
赋值
语句进行
赋值
。效率上
初始化
列表更好,特别是当定义的变量多的时候,即内存使用量大的时候。 当你的成员是常量或者是引用的时候,即变量只能
初始化
,不能
赋值
。这个时候只能用
初始化
列表。 使用括号来进行
初始化
时,只能在定义的时候。 ...
C++ 语言
64,637
社区成员
250,559
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章