할당 연산자는 *this 의 참조를 리턴하라.
Ob& Ob::operator=(const Ob& rhs)
{
...
return *this;
}
재귀치환을 검사하라.
Ob& Ob::operator=(const Ob& rhs)
{
if(this==&rhs)
return *this
...
}
배이스 클래스 소멸자는 항상 가상함수로 선언하라.
vurtual ~Ob();
인자가 1개인 생성자는 항상 explicit로 선언하라.(암시적인 형변환은 인자가 1개인 생성자와 형변환 연산자에서 발생한다)
explicit Ob(int n);
특별한 경우 외에는 형변환 연산자를 사용하지 마라. 꼭 필요하다면 to_string(), to_double(), c_str(), 과 같은 맴버함수를 만들어라. 또는 explicit operator 사용.
전위 증가
Ob& Ob::operator++()
{
*this += 1;
return *this;
}
후위 증가
const Ob Ob::operator++(int)
{
const Ob tmp = *this;
++(*this);
return tmp;
}
&&와 || 연산자는 절때 오버로딩 하지 않는다.
메모리 지정 new(placement new) 사용법(공유 메모리, 메모리map I/O 등에서 유용).
class Ob
{
void* operator new(size_t nSize, void* pBuf)
{
return pBuf;
}
static Ob* NewOb(void* pBuf, int n/*생성자 파라미터*/)
{
return new (pBuf) Ob(n); // operator new에 void* pBuf가 없다면 new Ob(n); 으로 호출
}
};
Ob* b = new Ob;
//아래와 동일->>
void* p = operator new(sizeof(Ob)); // 메모리 할당
p의 메모리를 Ob::Ob(); 호출하여 초기화
b = static_cast<Ob*>p;
new 를 호출할 경우 operator new (size_t) 가 호출되고 그 메모리가 생성자로 초기화된다.
그러나 operator new 에 파라미터를 더 주고 오버라이딩 할 경우 new (파라미터) 와 같이 호출해야한다.
malloc 처럼 생성자가 필요없는 메모리 할당의 경우 operator new(100); 과 같이 사용하면 된다.
맴버변수중 동적할당 변수는 const std::auto_ptr을 사용한다.
const std::auto_ptr == type* const ptr
std::auto_ptr<const type> == const type* ptr
소멸자 구현시 꼭 try-catch 로 예외가 빠져나가지 못하게 잡자.
특히 소멸자에서 함수를 호출할 경우 함수 하나하나 전부 try-catch로 묶어야한다.
'프로그래밍 > 정보' 카테고리의 다른 글
클래스, 변수, 상수 이름규칙 (0) | 2011.04.07 |
---|---|
프로그래밍에 대한 정보들 (0) | 2011.02.16 |