"구성원을 복사하는"개념을 배우면서이 책은 다음 진술을 제공합니다.클래스의 구성원 복사
또한 정적 할당 멤버가 참조, const 또는 복사 지정이없는 사용자 정의 유형 인 경우 기본 할당을 생성 할 수 없습니다.
나는이 진술이 실제로 전달하고자하는 것이 무엇인지 이해하지 못합니까? 아니면이 시나리오가 어떤 종류의 시나리오를 언급합니까? 감사.
"구성원을 복사하는"개념을 배우면서이 책은 다음 진술을 제공합니다.클래스의 구성원 복사
또한 정적 할당 멤버가 참조, const 또는 복사 지정이없는 사용자 정의 유형 인 경우 기본 할당을 생성 할 수 없습니다.
나는이 진술이 실제로 전달하고자하는 것이 무엇인지 이해하지 못합니까? 아니면이 시나리오가 어떤 종류의 시나리오를 언급합니까? 감사.
이 문은 컴파일러가 자동으로 (즉, 사용자 정의 형식) 쓰기 클래스에 대한 기본 할당 연산자 함수를 생성과 관련이있다. 기본 할당은 모든 구성원을 새 인스턴스로 복사하여 작동합니다. 이 성명서는 기본 할당이 이 아닌이 생성 될 수있는 세 가지 경우를 다루고 있습니다.
1) 회원이 참조 (예 :다른 클래스는 복사 생성자가없는 당신이있을 때 멤버 변수)
class Foople {
const int someConst;
};
3 일정 할 때))
class Foop {
int& reference;
};
2 포인터처럼 변수의 인스턴스를 참조 해당 유형의 멤버 변수는, 분명히이 경우 기본 (복사 생성자를 사용하는) 방법
class Uncopyable {
private:
Uncopyable(Uncopyable const& other);
};
class Fleep {
Uncopyable uncopyable;
};
를 사용하여 복사 할 수 없습니다, 당신은 당신의 자신의 할당 연산자를 작성해야합니다 (또는 P 것 ossibly없이).
당신은 (클래스의 모든 인스턴스간에 공유) 정적이 아니며, 하나
기본 = 연산자 (클래스 우리가 얘기와 같은) 및 복사 생성자는 더 이상 없다 V alid 및 매뉴얼 버전을 작성해야합니다.
인용문에서 언급 한 복사 생성자는 다른 클래스가 우리가 말하는 클래스의 복사 생성자가 아니라 복사 생성자를 가진 경우에만 = 연산자가 유효하다는 것을 의미하는 멤버를 인스턴스화하는 다른 클래스를위한 것입니다. –
Class1 obj = obj_of_class2; // this = copy 생성자를 호출합니다. – AbiusX
class ClassA
{
int& _myReferenceMember;
const int _myConstant;
ClassB _objWhereClassBHasNoCopyConstructor;
}
위의 3 가지 사례의 예입니다. 그리고 인용 한 것처럼, (복사 생성자를 원한다면) 커스텀 복사 생성자를 작성하거나 그러한 경우에 멤버 변수를 변경해야합니다.
그것의 차이를 말한다 : 클래스 A
들어
class A { int a; };
및
class B { int& a; };
컴파일러이를 암시 할당 연산자 (=)을 생성하지만, B
의 경우 것 할 수 없다. C++의 참조에는 포인터 의미가 없기 때문입니다. 즉, 참조 점이 생성 된 후에 변경할 수 없으므로 암시 적 복사본 생성자는 해당 멤버를 복사 할 수 없습니다. const 멤버 (명시 적으로 불변으로 표시됨)와 할당 연산자 (암시 적 또는 명시 적)가없는 멤버에 대해서도 마찬가지입니다.
A
의 기본 할당 연산자는이 작업을 수행 본질적 것 :
class A { A& operator=(A const& a_) { a = a_.a; } int a; };
어떤 책인가요? –