C ++ 핵심 원칙 C.80 : 당신은 기본 의미를 명확하고 사용 = 기본값을 사용하려면

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; }
};

복사 및 이동 작업의 몸을 작성하는 것은 자세한, 지루한, 오류가 발생하기 쉬운입니다. 컴파일러는 더 나은 않습니다.

복사 및 이동 작업의 실제 구현은 길고 지루하고 오류가 발생하기 쉬운 작동합니다. 컴파일러는 더 할 것입니다.

 

 

시행 (제안)

즉 중복 때문에, 컴파일러가 생성 한 버전과 동일한 접근성과 의미를하지 말았어야 특별한 조작의 몸을 (보통)

(중간) 컴파일러가 생성 론적 접근의 동일한 버전을 달성하기 위해 특별한 기능이 중복 작업이다.

 


 

이 기사가 도움이 생각? 에 오신 것을 환영합니다 엄지 손가락은 더 많은 사람들과 공유 할 수 있습니다.

더 업데이트 된 기사를 읽고, 객체 지향 사고의 마이크로 채널 대중 번호로하시기 바랍니다에주의 []

게시 된 408 개 원래 기사 · 원 찬양 653 · 전망 290 000 +

추천

출처blog.csdn.net/craftsman1970/article/details/104802529