특정 Class의 Object들은 절대로 복사되지 않아야 한다면, 복사생성자와 대입연산자의 사용을 막아야 한다. 하지만 이 둘은 Compiler에 따라 자동으로 만들어지는 경우가 있기 때문에 사용할 수 없도록 만들어야 한다.
class C { private: C(const C&); // 선언만 달랑 있음 C& operator=(const C&); // 사용한다면 Link 오류가 남 };
하지만 Link 시점의 오류를 Compile 시점의 오류로 옮기면 좀 더 좋지 않을까 ? 그럴려면 이것을 구현할려는 Class 자체에 넣지말고 별도의 복사방지 Class를 만드러서 상속하는 게 좋다.
class Uncopyable { protected: Uncopyable() {} // 생성과 소멸은 허용하지만 ~Uncopyable() {} private: Uncopyable(const Uncopyable&); // 복사는 방지 Uncopyable& operator=(const Uncopyable&); }; class C : private Uncopyable { ... }; // 복사생성자, 대입연산자가 선언되지 않음
참고로 부스트 라이브러리에 noncopyable 이라는 Class가 있는데 위에 소개한 Uncopyable 과 같은 역할을 하게 해주므로 활용해 보는 것도 좋다.
댓글 없음:
댓글 쓰기