【发布时间】:2020-03-27 23:11:37
【问题描述】:
[这个问题已经过高度编辑;请原谅,我已将编辑移到下面的答案中]
来自 C++11 上的Wikipedia (subarticle included):
这个[新的委托构造函数特性]带有一个警告:C++03 认为对象在其构造函数完成执行时被构造,但C++11 认为对象被构造一旦任何构造函数完成执行。由于允许执行多个构造函数,这意味着每个委托构造函数都将在其自身类型的完全构造对象上执行。派生类构造函数将在其基类中的所有委托完成后执行。"
这是否意味着委托链为 ctor 委托链中的每个链接构造一个唯一的临时对象?仅仅为了避免简单的 init 函数定义而产生的这种开销不值得额外的开销。
免责声明:我问这个问题是因为我是一名学生,但迄今为止的答案都是不正确的,表明缺乏研究和/或对所引用的研究的理解。我对此感到有些沮丧,因此我的编辑和 cmet 仓促而糟糕,主要是通过智能手机。请原谅;我希望我在下面的回答中已将其最小化,并且我了解到我需要在我的 cmets 中小心、完整和清晰。
【问题讨论】:
-
“委托链真的为 ctor 委托链中的每个链接构造一个唯一的临时对象吗?” 我不太明白你是如何从维基百科文章中推断出来的。
-
我在编辑我的问题时解决了这个问题,并在此处删除了我多余的(措辞不佳的)cmets。一探究竟。 +1 指出需要清晰!
-
我是否可以断定这条评论"Clarifying the rest: the implementation may just write on the same stack address (no ctors required, that was a blunder)" 从本质上改变了问题?如果我理解正确的话,它似乎消除了“委托链为 ctor 委托链中的每个链接构造一个唯一的临时对象”的有争议的说法。
-
我是个聪明人。老实说,我不知道任何特定的实现会做什么或不做什么来优化某些情况。我所知道的是,该标准在成员对象如何在破坏对象中被破坏以及由构造函数创建的对象如何在委托构造函数调用中被破坏之间进行了类比。也就是说,后面的对象被当作成员对象对待。我说的是来自 N3242 的 15.2。我在下面引用了它,找到那个方法会快一点。
标签: c++ performance c++11 constructor delegating-constructor