C.80 : 사용 = 기본값은 기본 의미를 사용하는 방법에 대한 명시해야하는 경우
C.80 : 당신은 기본 의미를 명확하고 사용 = 기본값을 사용하려면
이유 (이유)
컴파일러는 바로 기본 의미를 얻을 가능성이 더 높습니다 그리고 당신은 더 나은 컴파일러에 비해 이러한 기능을 구현할 수 없습니다.
컴파일러가 제대로 핸들 기본 기능의 의미에 더 많은 가능성이, 당신은 더 나은 컴파일러보다 더 할 수 없습니다.
실시 예 (실시 예)
class Tracer {
string message;
public:
Tracer(const string& m) : message{m} { cerr << "entering " << message << '\n'; }
~Tracer() { cerr << "exiting " << message << '\n'; }
Tracer(const Tracer&) = default;
Tracer& operator=(const Tracer&) = default;
Tracer(Tracer&&) = default;
Tracer& operator=(Tracer&&) = default;
};
우리가 소멸자를 정의하기 때문에, 우리는 복사 및 이동 작업을 정의해야합니다. = 기본값은 그 일의 최고의 간단한 방법입니다.
소멸자를 정의, 우리는 복사 및 이동 작업을 정의해야합니다. 사용 = 기본적으로 동일한 효과를 얻을 수있는 가장 좋은 및 간단한 방법입니다.
예 나쁜 (네가티브 샘플)
class Tracer2 {
string message;
public:
Tracer2(const string& m) : message{m} { cerr << "entering " << message << '\n'; }
~Tracer2() { cerr << "exiting " << message << '\n'; }
Tracer2(const Tracer2& a) : message{a.message} {}
Tracer2& operator=(const Tracer2& a) { message = a.message; return *this; }
Tracer2(Tracer2&& a) :message{a.message} {}
Tracer2& operator=(Tracer2&& a) { message = a.message; return *this; }
};
복사 및 이동 작업의 몸을 작성하는 것은 자세한, 지루한, 오류가 발생하기 쉬운입니다. 컴파일러는 더 나은 않습니다.
복사 및 이동 작업의 실제 구현은 길고 지루하고 오류가 발생하기 쉬운 작동합니다. 컴파일러는 더 할 것입니다.
시행 (제안)
즉 중복 때문에, 컴파일러가 생성 한 버전과 동일한 접근성과 의미를하지 말았어야 특별한 조작의 몸을 (보통)
(중간) 컴파일러가 생성 론적 접근의 동일한 버전을 달성하기 위해 특별한 기능이 중복 작업이다.
이 기사가 도움이 생각? 에 오신 것을 환영합니다 엄지 손가락은 더 많은 사람들과 공유 할 수 있습니다.
더 업데이트 된 기사를 읽고, 객체 지향 사고의 마이크로 채널 대중 번호로하시기 바랍니다에주의 []