출처 : http://blog.naver.com/jacking75/140057475052
[C/C++] 영 초기화(zero initialization)
C++에서 ‘영 초기화’(또는 기본값 초기화)라는 것을 들어보셨나요?
저는 이것을 근래에 알게 되었습니다. 그 전에는 이런 것이 있다는 것을 전혀 알지 못했습니다.
‘영 초기화’라는 것은 클래스(구조체)의 멤버들을 0으로 초기화 시켜주는 것을 말합니다.
#include <list>
#include <iostream>
using namespace std;
struct Item
{
int ItemCd; // 아이템코드
int BuyMoney; // 판매금액
};
void main()
{
// 일반적인 할당 방식 입니다.
Item* item1 = new Item;
// Java나 C# 처럼 할당 합니다. 이렇게 하면 영 초기화가 됩니다.
Item* item2 = new Item();
// 물론 정적 할당도 됩니다.
Item item3 = Item();
cout << item1->ItemCd << endl;
cout << item2->ItemCd << endl;
cout << item3.ItemCd << endl;
}
결과
-842150451
0
0
그럼 구조체 Item에 vector와 같은 것이 있으면 어떻게 될까요 ?
vector가 있으면 영 초기화가 되지 않습니다.
struct Item
{
list< int > Datas;
int ItemCd; // 아이템코드
int BuyMoney; // 판매금액
};
void main()
{
Item* item1 = new Item;
Item* item2 = new Item();
Item item3 = Item();
cout << item1->ItemCd << item2->ItemCd << item3.ItemCd << endl;
}
결과
-842150451
-842150451
-842150451
만약 클래스(또는 구조체)가 다른 클래스를 포함한다면 어떨까요?
영 초기화가 됩니다.
struct Skill
{
int SkillCd;
int SkillKind;
};
struct Item
{
Skill skill;
int ItemCd; // 아이템코드
int BuyMoney; // 판매금액
};
void main()
{
Item* item1 = new Item;
Item* item2 = new Item();
Item item3 = Item();
cout << item1->ItemCd << endl;
cout << item2->ItemCd << endl;
cout << item3.ItemCd << endl;
}
결과
-842150451
0
0
그러나 Skill 구조체가 list와 같이 영 초기화를 할 수 없는 것을 포함하고 있다면 영 초기화가 되지 않습니다.
2년 반전부터 정기적으로는 C++ 공부를 하지 않았는데 요즘 다시 해야될 필요성을 느끼고 하고 있습니다. 생각해보니 예전보다 실력이 올랐기 때문에 지금 C++ 공부하면 예전보다 더 확실하고 빠르게 공부할 수 있는데 왜 안하고 있었는지 약간 의문스럽네요 ^^;;
댓글 없음:
댓글 쓰기