본문 바로가기

기타

C++ - 클래스 복사 방지하기

클래스가 동적으로 메모리가 할당되는 멤버변수를 가지는 경우 디폴트 복사 생성자와 대입 연산자를 사용하게 되면, 얕은 복사가 발생해 Dangling Pointer와 메모리 누수가 발생 할 수 있습니다. 때문에 클래스가 복사되는 것을 막는 방법이 필요합니다. 



class SomeObj
{
public:
...
privatre:
  SomeObj(SomeObj&);  // 선언은 하되 구현은 하지 않는다.
  SomeObj& operator=(SomeObj&); // 선언은 하되 구현은 하지 않는다.
};

또는
class Uncopyable
{
public:
  Uncopyable() {}
  ~Uncopyable() {}
private:
  Uncopyable(Uncopyable&);  // 선언은 하되 구현은 하지 않는다.
  Uncopyable& operator=(Uncopyable&);  // 선언은 하되 구현은 하지 않는다.
};

class SomeObj : public Uncopyable
{
...
};


만약 복사가 되어야 하는 클래스라면, 직접 복사 생성자와 대입연산자를 구현해야 합니다.