템플릿 클래스 Triple을 구현했습니다.이 템플릿은 세 가지 유형을 모두 담고있는 컨테이너입니다. 내 문제는, 내 클래스는 매개 변수로 값에 대한 세 가지 const 참조를 소요하고 값은 개인 (정의)해야하지만, 또한 복사 생성자 및 오버로드 된 할당 연산자를 구현해야합니다.C++ 템플릿 클래스 복사 생성자 및 할당 연산자
template <typename T1, typename T2, typename T3>
class Triple
{
public:
Triple()
{ }
Triple(const T1 &a, const T2 &b, const T3 &c) : a(a), b(b), c(c)
{ }
// copy constructor
Triple(const Triple &triple) {
a = triple.first();
b = triple.second();
c = triple.third();
}
// assignment operator
Triple &operator=(const Triple& other) {
//Check for self-assignment
if (this == &other)
return *this;
a = other.first();
b = other.second();
c = other.third();
return *this;
}
private:
T1 const& a;
T2 const& b;
T3 const& c;
};
어떻게 변수에서 const 지정하지 않고 복사 생성자와 대입 연산자를 구현하는 것이? 당신은 (일반적으로)이 객체의 수명이 거의 확실 유형을 사용해야 개체, a
, b
및 c
의 수명보다 더 오래 갈 것이라는 점을 알 수 없기 때문에
할당 연산자의 문제점은 const가 아니기 때문에 * 아닙니다 *입니다. 그것은 참조가 생성 될 때 (즉, 생성자의 초기화 목록에있는) 초기화되어야하고 나중에 변경할 수 없기 때문입니다. 대입 연산자 *는 이미 완전히 생성 된 객체를 변경합니다. – JohnB