클래스가 동적으로 메모리가 할당되는 멤버변수를 가지는 경우 디폴트 복사 생성자와 대입 연산자를 사용하게 되면, 얕은 복사가 발생해 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
{
...
};
만약 복사가 되어야 하는 클래스라면, 직접 복사 생성자와 대입연산자를 구현해야 합니다.
'기타' 카테고리의 다른 글
C++ - wchar_t 와 char 의 형변환 (0) | 2013.11.14 |
---|---|
C++ - 클래스 복사방지 Effective C++ 내용 (0) | 2013.11.14 |
C++ - [STL] auto_ptr – 조심히 사용해야 하는 스마트 포인터 (0) | 2013.11.14 |
C++에서 스마트 포인터 템플릿 (0) | 2013.11.14 |
C++ - 스마트 포인터 커스터마이즈 (0) | 2013.11.14 |