ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Effective C++...5
    일지 2022. 6. 3. 16:03

    컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자

    private으로 선언 후 정의를 하지 않는 방법

    복사 생성자와 복사 대입 연산자를 private 내부에서 선언하면 컴파일러가 자동 생성하지 않는다.

    또, friend를 통해 사용하고자 하더라도 정의가 되어 있지 않으므로 링크 에러가 발생한다.


    class HomeForSale {

    public:

        ...

    private:

        ...

        HomeForSale(const HomeForSale&);

        HomeForSale& operator=(const HomeForSale&);

    }


     

    링크 에러를 컴파일 시점 에러로 옮기기

    복사를 방지하는 상위 클래스를 만들어 상속받으면 friend에서도 복사 관련 함수에 접근할 수 없게 되어 링크 에러 대신 컴파일 에러가 발생하게 된다.


    class Uncopyable {

    protected: // 파생된 객체에 대해 생성, 소멸은 허용한다.

        Uncopyable() {}

        ~Uncopyable() {}

    private: // 하지만 복사는 막는다.

        Uncopyable(const Uncopyable&);

        Uncopyable& operator=(const Uncopyable&);

    }

     

    class HomeForSale : private Uncopyable {};


     

    ※ 부스트 라이브러리에서 Uncopyable과 동일한 기능을 하는 noncopyable 클래스를 지원한다.

     

    댓글

Designed by Tistory.