2017-10-28 18 views
0

클래스에 포인터가 있으면 할당 연산자가 오버로드되어 딥 복사본을 만들어야합니다 (얕은 복사본은 올바르지 않습니다).기본 할당 연산자가 벡터에 적합합니까?

클래스에 멤버 벡터가있는 경우 딥 복사 (오버로드 operator=)가 필요합니까?

+0

전문 용어에 대한 설명 : 할당 연산자에 과부하 * 지 않습니다. 오버로딩이란 또 다른 의미입니다. 여기에서하는 일은 컴파일러가 자동으로 생성하는 기본값 연산자 대신에 할당 연산자의 자체 버전을 정의하는 것입니다. –

답변

1

std::vector은 스스로 처리 할 수 ​​있습니다. 당신은 특별한 것을 할 필요가 없습니다. 해당 복사 작업을 수행하는 자체 할당 연산자가 있습니다.

+0

고맙습니다. 어레이에도 유효합니까? – tarktark

+1

@tarktark - [매뉴얼 읽기] (http://en.cppreference.com/w/cpp/container/array) ('operator ='를 찾으십시오) – rustyx

2

클래스에 포인터가 있으면 할당 연산자 인 (단순 복사 아님)을 사용하여 완전 복사를 수행해야합니다.

포인터가 소위 "소유"포인터 인 경우, 즉 클래스가 가리키는 자원을 의미 론적으로 소유하고 그 최종 릴리스 또는 삭제를 담당하는 경우에만.

포인터는 코드의 다른 부분이 담당하는 포인터를 가리키는 소위 "관찰"포인터 일 수도 있습니다. 관찰 포인터는 참조와 유사합니다.

딥 복사본을 사방에 구현하기 전에이를 명심하십시오.

클래스에 멤버 벡터가있는 경우 딥 복사 (연산자 = 오버로드)가 필요합니까? ? 그 포인터가 소유 포인터의 경우 실제로 벡터 에 대한 포인터의 경우에만

.

사실상 이럴 필요가 없습니다.

난 당신이 정말 어쨌든 정상이 아닌 포인터 멤버 변수에 대해 얘기하는 가정

class Example 
{ 
// ... 
    std::vector<int> v; 
}; 

이 경우에, 당신은 모든 포인터를 처리 할 필요가 없습니다. std::vector은 모든 것을 자동으로 관리합니다.