'2009/08'에 해당되는 글 1건

  1. 2009.08.08 POD(Plain Old Data) & Non POD by 1stPasa (1)


Plain Old Data(POD)

C의 struct나 built-in-type 과 동일한 메모리 구조를 갖는 object를 의미.
memset, memcpy에 의한 단순 메모리 복사가 가능한 메모리 구조를 갖는다.
POD 의 조건은 다음과 같다

1. built-in type
2. 가상 함수가 없고 사용자 정의 할당자와 소멸자를 가지지 않은 class의  object
3. non POD를 non-static 멤버로 가지지 않은 class의 object

가상함수가 존재할경우 추가정보가 필요하므로 Non POD 임이 명백하지만
할당자와 소멸자를 갖는 Class 의 경우 할당자와 소멸자의 존재 자체가 메모리 구조를 바꿀이유는 없다
하지만 할당자와 소멸자의 경우

class NPOD
    {
    int x_;
    char* buf_;

    NPOD() : buf_(0) {}
    ~NPOD() { delete buf_; }
    NPOD& operator=(const NPOD& other)
        {
        x_ = other.x_;
        int bufLen = strlen(other.buf_);
        buf_ = new char[bufLen+1];
        memcpy(buf_, other.buf_, bufLen);
        }
    }

NPOD t1, t2;
...
t1 = t2;
memcpy(&t1, &t2);



위와 같은 경우 memcpy 의 결과가 t1=t2 의 결과와 같지 않게 된다.
따라서 규격에서는 할당자와 소멸자가 유저에 의해 정의되어있는 Class 는 Non POD 로 정의한다.

마지막으로 static 멤버의 경우 object에 포함되는것이 아니기 때문에 Non POD 이건 POD 이건 상관이 없다.
따라서 POD가 되려면 non static 멤버로는 POD만을 가져야만 한다.


출처
http://gpgstudy.com/forum/viewtopic.php?t=10148&view=previous

Posted by 1stPasa

댓글을 달아 주세요

  1. Richardml 2014.12.24 05:37  댓글주소  댓글쓰기 수정/삭제

    이용약관위배로 관리자 삭제된 댓글입니다.