2016-06-29 8 views
-1

클래스를 생성하고 생성자를 통해 객체 배열을 초기화했습니다. 이유는 무엇입니까? 또는 왜 복사 생성자가 여기 호출되지 않았습니까? 그것은 elion 복사입니까? 네 말이 맞아[Prob] 복사 생성자가 호출되지 않는 이유

#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

가능한 [복제 추출 및 반환 값 최적화 란 무엇입니까?] (http://stackoverflow.com/questions/12953127/what-are-copy-elision-and-return-value-optimization) – Holt

답변

0

, 그것은 따라서 생성자가 호출되지 않습니다 복사, 컴파일러가 최적화를 수행하고 올바른 배열 내 할당 된 메모리 대신에 객체를 생성, 복사 생략합니다.

+0

감사합니다. copy elision입니다. 하지만 당신이 그것을 더 자세히 설명해 줄 수 있습니다, 나는 "-fno-elide-constructors"옵션으로 prog를 컴파일 한 다음 복사 생성자를 호출합니다. –