2016-06-29 169 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,然後調用複製構造函數。 –

相關問題