2016-06-29 131 views
-1

我已经创建了一个类并通过构造函数初始化了一个对象数组,为什么或者为什么不在这里调用复制构造函数呢?它是复制elision?[问题]为什么复制构造函数没有被调用

#include<iostream> 
#include<stdio.h> 

class ABC 
{ 
    int x, y; 
public: 
    ABC() 
    { 
     x = 0; 
     y = 0; 
    } 
    ABC(int a,int b) 
    { 
     x = a; 
     y = b; 
    } 
    ABC(const ABC &obj) 
    { 
     std::cout<<"Copy called"; 
    } 
}; 

int main() 
{ 
    ABC obj[2] = {ABC(), ABC(5,6)}; //copy elision or copy constructor? 
} 
+1

请提供一个编译代码...您缺少标题,所有的构造函数都是私有的。 – Holt

+0

是的,这是由于copy-elision,如果您使用的是clang或g ++,请尝试使用'-fno-elide-constructors'进行编译。 – Holt

+2

可能重复[什么是复制elision和返回值优化?](http://stackoverflow.com/questions/12953127/what-are-copy-elision-and-return-value-optimization) – Holt

回答

0

你是对的,这是复制省略,编译器优化技术不正确,并代替阵列中分配内存中创建对象,因此拷贝构造函数不会被调用。

+0

谢谢这是复制elision但你可以详细说明它,我已经用“-fno-elide-constructors”选项编译prog,然后调用复制构造函数。 –

相关问题