2017-05-11 1 views
-1

이 같은 세 가지 개체를 만드는 경우 :기본 생성자 호출

A myA; // line 1 
A myA2 = A(); // line 2 
A myA3 = myA; // line 3 

내가 복사 생성자가 호출 두 번째 줄에 생각을. 하지만이 (Visual Studio) 줄 1 및 2 줄 때 기본 생성자를 호출하십시오. 물론 3 행째는 복사 생성자를 호출합니다. 따라서 라인 1과 라인 2 사이에는 차이가없는 것으로 보입니다. 둘 다 기본 구문을 호출합니다. 그렇다면 왜 다른 구문을 사용합니까? 그런데

내 TestClass에 A는 형태 가지고

class A { 
    public: 
    A() { cout << "default ctor is called..." << endl; } 
    A(const A &obj) { cout << "copy ctor is called..." << endl; } 
}; 
+0

참조 : [복사 추출 및 반환 값 최적화 란 무엇입니까?] (https://stackoverflow.com/questions/12953127/what-are-copy-elision-and-return-value-optimization). – WhozCraig

+0

"복사 elision" – Angew

답변

0

복사 생성자 호출이 copy elision에 따라 최적화하는 단계; 이는 C++ 이후로 보장됩니다. 이니셜식이 prvalue 소스 유형의 CV-규정되지 않은 버전의 경우 대상의 클래스와 동일한 클래스의 초기화에서

되면, 이니셜 식 대상 개체

을 초기화하는 데 사용