2012-12-17 3 views
2

이 새 오브젝트를 작성하면 v은 완전히 새로운 오브젝트 또는 단순히 *this으로 참조되는 동일한 오브젝트 공간을 생성합니까?이 과제물에 복사본이 있습니까?

Vector2 v = *this;

나는 그것이 실제로 새 개체를 만드는 것입니다,하지만 난 다음이 코드가 설정되어있는 클래스 함수에서 경우에도이 새로운 객체를 조작하는 샘플 응용 프로그램에서이 코드를보고 있어요 기대하지 않을 것이다 const. 따라서 나는이 객체가 v인데 실제로는 완전히 *this이 아닌 완전히 별개의 메모리 공간이라고 예상 할 것입니다.

+4

여기에 지정이 없습니다. –

답변

5

새 개체를 만들고 있습니다. 예를 들어 초기화가 아닌 할당입니다.

당신하지만 무시할 수있다 (이 방법은 const 경우 또는 const Vector& v = *this) v*this 별칭되는 경우에 참조 Vector2& v = *this;을 이용하여.

그 이유는 정확히 명시된 하나입니다 - 이런 일이 발생하는 방법은 const이기 때문에,이 *this을 변이 할 수있는 방법은 없다 - 그래서 당신은 그것의 비 const 사본이 필요합니다.

+0

@andrewx no. 할당은 기존 객체에 할당 할 때입니다 :'Vector2 v; v = * this;'와는 반대로 'Vector2 v = * this;'. –

0

예, v*this의 완전히 새로운 개체입니다. 당신이 Vector2 방법 안에 있다고 가정

1

, 당신은 이유 복사 할당라고 사용하는 =이 연산자. 이제는 딥 복사, 얕은 복사본 (포인터를 복사하지만 포인터가 가리키는 객체는 복사하지 않음) 또는 연산자의 실제 구현에 이르는 모든 것을 수행합니다.

+0

이 토론에 추가 할 좋은 지적, 감사합니다. – johnbakers

관련 문제