POD 및 스칼라 형식의 0 초기화

업데이트: 2007년 11월

POD 및 스칼라 형식은 기본 생성자 구문으로 인스턴스화될 경우 항상 0으로 초기화됩니다.

struct S {
   void *operator new (unsigned int size, void*p, int i)
   {
      ((S*)p)->i = i; return p;
   }
     
   int i;
};

struct T
{
   int i;
   char c;
};

class C
{
   T t;
   int i;
public:
   C(): t(), i() {}   // Zero initializes members of class.
};

// Zero initialize members of t.
// t->i == 0 & t->c == 0
T* t = new T();

// Call placement new operator for S, then
// zero initialize members of pS.
// pS->i == 0 & pS->i != 10
S s;
S* pS = new( &s, 10 ) S();

// Zero initialize *pI
// *pI == 0
int* pI = new int();

// Zero initialize members of c
// c.t.i == 0 & c.t.c == 0 & c.i == 0
C c;

Visual Studio .NET 동작은 초기화 후 () 괄호를 무시하며 멤버를 항상 초기화되지 않은 상태로 둡니다. 생성자의 초기화 목록 외부에서 초기화된 형식에 대한 Visual Studio .NET 동작으로 되돌리려면 다음과 같이 () 괄호를 제거합니다.

T* t = new T;   // Members contain uninitialized data.
S s;
S* pS = new( &s, 10 );   // pS->i == 10
int* pI = new int;   // *pI is uninitialized.

생성자의 초기화 목록 내부에서 초기화된 형식에 대한 Visual Studio .NET 동작으로 되돌리려면 다음과 같이 목록에서 초기화를 제거합니다.

class C
{
   T t;
   int i;
public:
   C() {}   // Members of class are not initialized.
};

참고 항목

참조

Visual C++ 컴파일러의 주요 변경 사항