[C++] 포인터 및 배열 초기화
|
그러나 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