클래스에 포인터가 있으면 할당 연산자가 오버로드되어 딥 복사본을 만들어야합니다 (얕은 복사본은 올바르지 않습니다).기본 할당 연산자가 벡터에 적합합니까?
클래스에 멤버 벡터가있는 경우 딥 복사 (오버로드 operator=
)가 필요합니까?
클래스에 포인터가 있으면 할당 연산자가 오버로드되어 딥 복사본을 만들어야합니다 (얕은 복사본은 올바르지 않습니다).기본 할당 연산자가 벡터에 적합합니까?
클래스에 멤버 벡터가있는 경우 딥 복사 (오버로드 operator=
)가 필요합니까?
클래스에 포인터가 있으면 할당 연산자 인 (단순 복사 아님)을 사용하여 완전 복사를 수행해야합니다.
포인터가 소위 "소유"포인터 인 경우, 즉 클래스가 가리키는 자원을 의미 론적으로 소유하고 그 최종 릴리스 또는 삭제를 담당하는 경우에만.
포인터는 코드의 다른 부분이 담당하는 포인터를 가리키는 소위 "관찰"포인터 일 수도 있습니다. 관찰 포인터는 참조와 유사합니다.
딥 복사본을 사방에 구현하기 전에이를 명심하십시오.
클래스에 멤버 벡터가있는 경우 딥 복사 (연산자 = 오버로드)가 필요합니까? ? 그 포인터가 소유 포인터의 경우 실제로 벡터 및에 대한 포인터의 경우에만
.
사실상 이럴 필요가 없습니다.
난 당신이 정말 어쨌든 정상이 아닌 포인터 멤버 변수에 대해 얘기하는 가정
class Example
{
// ...
std::vector<int> v;
};
이 경우에, 당신은 모든 포인터를 처리 할 필요가 없습니다. std::vector
은 모든 것을 자동으로 관리합니다.
전문 용어에 대한 설명 : 할당 연산자에 과부하 * 지 않습니다. 오버로딩이란 또 다른 의미입니다. 여기에서하는 일은 컴파일러가 자동으로 생성하는 기본값 연산자 대신에 할당 연산자의 자체 버전을 정의하는 것입니다. –