C对象创建和构造函数

C对象创建和构造函数,第1张

概述我现在正在学习ctors并有一些问题.在这些方面: Foo obj(args);Foo obj2;obj2 = Foo(args);Foo obj3 = Foo(args); 第一部分:只有1个被称为(Foo)的构造函数和obj被初始化.所以,1个对象创建. 第二部分:创建临时对象obj2,为其调用默认ctor.接下来,我们创建另一个Foo副本,并将其副本传递给operator =(). 我现在正在学习ctors并有一些问题.在这些方面:
Foo obj(args);Foo obj2;obj2 = Foo(args);Foo obj3 = Foo(args);

第一部分:只有1个被称为(Foo)的构造函数和obj被初始化.所以,1个对象创建.

第二部分:创建临时对象obj2,为其调用默认ctor.接下来,我们创建另一个Foo副本,并将其副本传递给operator =().是对的吗?所以,3个本地临时对象,2个构造函数调用.

第三部分:创建1个对象Foo并将其副本传递给operator =().所以,2个临时对象和1个ctor调用.

我理解这个吗?如果这是真的,编译器(例如最后一个gcc)会在常见情况下优化这些吗?

解决方法 我将先评论第三个:
Foo obj3=Foo(args);

它不使用operator =,称为复制赋值.相反,它调用copy-constructor(理论上).这里没有任务.所以从理论上讲,有两个对象创建,一个是临时的,另一个是obj3.编译器可能会优化代码,完全避免创建临时对象.

现在,第二个:

Foo obj2;         //one object creationobj = Foo(args);  //a temporary object creation on the RHS

这里第一行创建一个对象,调用默认构造函数.然后它调用operator =传递从表达式Foo(args)创建的临时对象.所以有两个对象只有operator =通过const引用获取参数(这应该是它应该做的).

关于第一个,你是对的.

总结

以上是内存溢出为你收集整理的C对象创建和构造函数全部内容,希望文章能够帮你解决C对象创建和构造函数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1256952.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存