본문 바로가기

C/C++

[C++] 포인터 및 배열 초기화

[C++] 포인터 및 배열 초기화


char * msg = new char[65546];
C언어에서는, 배열의 모든 값을 초기화하려면 memset를 사용하거나 for문을 돌면서 각각 초기화를 수행한다.

그러나 C++에서는 value-initialization 이라고 알려진, 보다 간단한 방법이 있다.
char * msg = new char[65546]();
즉, ()를 추가하는 것이다. 이는 배열/포인터 모두 해당된다.


예를 들면,

#include <iostream>
struct Foo {
   
char bar;
   
char baz;
   
char foobar;
   
// the struct is a POD
   
//virtual void a() { bar='b'; }
};

int main() {
   
Foo o1;
   
Foo o2 = Foo();

    std
::cout << "O1: " << (int)o1.bar <<" "<< (int)o1.baz <<" "<< (int)o1.foobar << std::endl;
    std
::cout << "O2: " << (int)o2.bar <<" "<< (int)o2.baz <<" "<< (int)o2.foobar << std::endl;
   
return 0;
}
결과는 다음과 같이 나온다.

O1: -27 -98 0

O2: 0 0 0

즉, Foo뒤에()를 추가함으로써 모든 POD(Plain Old Data) 멤버에 초기화를 수행한다.

그러나, 위 코드에서 주석으로 처리한 가상 함수 부분을 주석 해제 하면,  다음과 같이 초기화가 수행되지 않는다.

O1: -44 -27 -98

O2: -71 -120 4