2012-05-15 5 views
2

다음 코드는 복사 생성자를 호출하지 않습니다.이 복사 생성자는 elision입니까?

struct X 
{ 
    int x; 
    X(int num) 
    { 
     x = num; 
     std::cout << "ctor" << std::endl; 
    } 
    X(const X& other) 
    { 
     std::cout << "copy ctor" << std::endl; 
    } 
}; 

int main(int argc, _TCHAR* argv[]) 
{ 
    X* x = new X(3); 
    X* y(x); 
} 

출력 :

ctor 

는 복사의 ctor되어 생략?

+1

심지어 생략 할 수있는 단일 복사본을 볼 수 없습니다. 당신의 모범이 맞습니까? –

+0

@CharlesBailey 우물'X (const X & other)'**는 ** 올바른 상황에서 생략 될 수 있습니다 (이것은 그렇지 않습니다). –

+0

Java 책으로 C++을 배우지 마십시오. 아무도 아무 것도하지 않습니다. –

답변

9

코드

X* x = new X(3); 
X* y(x); 

X x(3); 
X* y = new X(x); 

당신은 객체를 복사하지 않을 하지만, 포인터와 동일하지 않습니다.X* y(x); 다음에 두 포인터가 같은 개체를 가리 킵니다.

관련 문제