2011-08-06 3 views
2
class NotCopyable 
{ 
public: 
    NotCopyable() { } 
private: 
    NotCopyable(const NotCopyable&); 
    NotCopyable& operator = (const NotCopyable&); 
}; 

class BasicTimer : private NotCopyable 
{ 
public: 
     ... 
} 

개인 상속을 사용할 권리가 있습니까?개인 상속을 사용할 권리가 있습니까?

답변

2

예, 개인 회원 가시성을 완벽하게 수용 할 수 있습니다. 그러면 NotCopyable 또는 그로부터 파생되는 내용을 복사하지 않아도됩니다.

+0

기본 클래스에서 NotCopyable() {}을 (를) private로 선언하지 않는 이유는 무엇입니까? – Kim

+4

@Kim : 최소한 (friend modifiers를 고려한 후) 접근성을 보호하는 생성자가 없다면 파생 클래스의 객체를 구성 할 수 없습니다. –

2

예.

부스트는 똑같은 기능을합니다.

1

항상 파생 클래스에서 사용할 수 있도록이 클래스를 완벽하게 확인하고도 권장입니다 여기

0

특별한 아무것도되지 않으며, 개인 공용 또는 protected.So 개인 유산으로 상속 여부를 NotCopyable의 생성자, 공개 .

잘 설계된 부스트 라이브러리는 boost :: noncopyable을 제공하며, 기본적으로 정확히 수행합니다. 그것은 당신의 코드를 더 잘 읽을 수있게합니다. 누가 이것을 쓰고 싶습니까?

class Bla 
{ 
    // bla bla bla... 

private: 
    Bla(const Bla &); // not implemented. 
    Bla & operator=(const Bla &); // not implemented. 
}; 

다음과 같이 간단히 쓸 수 있습니까?

class Bla : boost::noncopyable 
{ 
    // bla bla bla... 
}; 
관련 문제