EC++에 소개된 Noncopyable 클래스를 만들어 쓰려고 합니다.
그런데, 이 클래스를 상속 받아도 사용자(프로그래머)가
의도적으로 복사 방지를 피해갈 수 있더군요.
Code: Select all
// 복사 방지 기반 클래스
class CNoncopyable
{
public:
// 기본 생성과 소멸은 제공
CNoncopyable() { }
~CNoncopyable() { }
private:
// 복사 생성과 대입 연산은 구현 안함
CNoncopyable( const CNoncopyable & a );
const CNoncopyable& operator = ( const CNoncopyable& a );
};
Code: Select all
// 복사되면 안되는 클래스
class CNode : private CNoncopyable
{
public:
CNode() { }
// 복사 생성자에서 부모의 복사 생성자를 호출하지 않는다.
CNode( const CNode &a ) { }
// 대입 연산자에서 부모의 대입 연산자를 호출하지 않는다.
const CNode& operator=( const CNode & a )
{
return *this;
}
public:
int nData;
};
문제 없이 복사 함수 안으로 들어갈 수 있는데...
뭔가 잘못 구현한걸까요?
Code: Select all
void main()
{
CNode a, b;
a = b; // 문제 없다.
CNode c(a); // 문제 없다.
}