C ++ 핵심 원칙 C.30 : 당신이 집단 소송의 파괴를 취소해야하는 경우, 정의 소멸자

C.30은 : 클래스는 객체 파괴에 명시 적 조치를 필요로하는 경우 소멸자를 정의

클래스가되면 파괴 작업을 취소 할 필요가 정의 소멸자

 

이유 (이유)

소멸자는 암시 적으로 객체의 수명의 끝에서 호출됩니다. 기본 소멸자가 충분하다면, 그것을 사용할 수 있습니다. 클래스 요구 사항이 이미 회원 소멸자의 일부가 아닌 코드를 실행하는 경우에만이 아닌 기본 소멸자를 정의합니다.

소멸자는 객체의 수명이 암시 적으로 호출됩니다. 기본 소멸자가 충분하다면, 다르게 정의 할 필요가 없습니다. 만이 아닌 기본 클래스 소멸자에 정의 된 소멸자 프로세스를 외부에서 조작 부재를 요구했다.

 

실시 예 (실시 예)

template<typename A>
struct final_action {   // slightly simplified
    A act;
    final_action(A a) :act{a} {}
    ~final_action() { act(); }
};

template<typename A>
final_action<A> finally(A act)   // deduce action type
{
    return final_action<A>{act};
}

void test()
{
    auto act = finally([]{ cout << "Exit test\n"; });  // establish exit action
    // ...
    if (something) return;   // act done here
    // ...
} // act done here

final_action의 전체 목적은 파괴에 실행되는 코드의 조각 (보통 람다)를 얻는 것입니다.

final_action의 유일한 목적은 코드의 조각 (보통 람다 식) 실행 final_action 파괴되어 있는지 확인하는 것입니다.

 

Note (주의)

사용자 정의 소멸자를 필요로 클래스의 두 가지 일반적인 범주가 있습니다 :

두 가지 경우 사용자 정의 클래스의 소멸자는 일반적이 필요합니다.

  • 이미 소멸자, 예를 들면, 벡터 또는 트랜잭션 클래스 클래스로 표현되지 않는 리소스를하는 클래스입니다.

    클래스 관리 자원은 성능에 클래스 소멸자 포함되어 있지 않습니다. 벡터 또는 트랜잭션 클래스 등.

  • 그러한 트레이서 또는 final_action 같이, 파괴시 동작을 실행 주로 존재하는 클래스.

    본 형태의 주된 목적은 파괴에 대한 작업을 수행한다. 예 트레이서 및 final_action 들어.

 

예 나쁜 (네가티브 샘플)

class Foo {   // bad; use the default destructor
public:
    // ...
    ~Foo() { s = ""; i = 0; vi.clear(); }  // clean up
private:
    string s;
    int i;
    vector<int> vi;
};

기본 소멸자는보다 효율적으로, 더 잘 수행하고 잘못 얻을 수 없습니다.

기본 소멸자는 더 잘 할 수 있으며,보다 효율적으로, 잘못이되지 않습니다.


Note (주의)

기본 소멸자는 필요하지만 그 세대는, 사용 = 기본 (예를 들어, 이동 생성자를 정의하여) 억제 된 경우.

기본 소멸자를 원하는,하지만 생성이 억제되어있는 경우 (예를 들어, 운동은 생성자를 정의하기 때문에) 사용 = 기본 (명시 적으로 요청 생성, 번역기의 참고).

 

시행 (제안)

같은 포인터와 참조와 같은 것 "암시 적 자원"을 찾습니다. 모든 데이터 멤버가 소멸자가 비록 소멸자 클래스를 찾습니다.

같은 포인터와 참조 가능한 "암시 적 자원"을 찾고. 모든 데이터 멤버들의 소멸자 경우에도, 클래스 소멸자를 찾고 있습니다.

 

원본 링크 :

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c30-define-a-destructor-if-a-class-needs-an-explicit-action-at-object-destruction

 


 

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

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

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

추천

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