mr.*_*.pd 9 c++ copy-constructor default-constructor
我和我的一位同事讨论过关于他人的问题
Pt pt;
Run Code Online (Sandbox Code Playgroud)
和
Pt pt = Pt();
Run Code Online (Sandbox Code Playgroud)
是等价的.我怀疑在第二种情况下可以调用复制分配,但事实证明并非如此.
当我们进行我们的小实验时,我决定测试一个奇怪的位,我的同事认为甚至不会编译:
//here the compiler calls a copy constructor and doesn't call the default constructor prior to that
// O_o
Pt pt = pt;
Run Code Online (Sandbox Code Playgroud)
以下是一个工作示例:http://ideone.com/XmJSz7
所以,问题是 - 发生了什么:
Pt pt = pt;
Run Code Online (Sandbox Code Playgroud)
构造如type object = something调用复制构造函数,而不是赋值运算符
考虑到这一点,这是发生的事情:
Pt pt =- >此时,Pt创建对象,命名pt(此时没有任何内容被初始化)= pt;- >此时,pt使用参数调用复制构造函数 - 本身(pt)pt创建但未初始化(in 1.),这是(有点)有效 - pt复制构造函数(in 2.)将被"正确"执行,将已存在和未初始化的对象作为右手参数pt(1.再次)不久 - 这很糟糕.
值得一提的是,如果该pt对象是全球性的或静态的,这将是默认初始化步骤1.-到达后=.
编辑:关于最初的"谜题" Pt pt = Pt();,你可以看到这个问题:复制初始化和直接初始化之间的C++是否存在差异?和它接受的答案.而这一点似乎也很有趣:如何在c ++中使用默认构造函数初始化变量
| 归档时间: |
|
| 查看次数: |
490 次 |
| 最近记录: |