2012-09-25 3 views
3

MSDN.What의 도움으로 Windows 프로그래밍을 배우는 중입니다. 왜 누군가 다음과 같은 객체를 초기화합니까?왜 비어있는 객체를 초기화합니까?

WNDCLASS wc = { }; 

이 개체의 모든 메모리가 0이됩니까? 전체 소스 코드는 다음입니다 :

#ifndef UNICODE 
#define UNICODE 
#endif 

#include <windows.h> 

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); 

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow) 
{ 
    // Register the window class. 
    const wchar_t CLASS_NAME[] = L"Sample Window Class"; 
    WNDCLASS wc = { }; 

    wc.lpfnWndProc = WindowProc; 
    wc.hInstance  = hInstance; 
    wc.lpszClassName = CLASS_NAME; 

    RegisterClass(&wc); 

    // Create the window. 

    HWND hwnd = CreateWindowEx(
     0,        // Optional window styles. 
     CLASS_NAME,      // Window class 
     L"Learn to Program Windows", // Window text 
     WS_OVERLAPPEDWINDOW,   // Window style 

     // Size and position 
     CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 

     NULL,  // Parent window  
     NULL,  // Menu 
     hInstance, // Instance handle 
     NULL  // Additional application data 
     ); 

    if (hwnd == NULL) 
    { 
     return 0; 
    } 

    ShowWindow(hwnd, nCmdShow); 

    // Run the message loop. 

    MSG msg = { }; 
    while (GetMessage(&msg, NULL, 0, 0)) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 

    return 0; 
} 

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    switch (uMsg) 
    { 
    case WM_DESTROY: 
     PostQuitMessage(0); 
     return 0; 

    case WM_PAINT: 
     { 
      PAINTSTRUCT ps; 
      HDC hdc = BeginPaint(hwnd, &ps); 

      FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1)); 

      EndPaint(hwnd, &ps); 
     } 
     return 0; 

    } 
    return DefWindowProc(hwnd, uMsg, wParam, lParam); 
} 

답변

2

은 아마도 자동 초기화를 활용할 수 있습니다.

참조 :

C++ 03 표준 8.5.1 집계
파라 7 :

회원은 거기보다 목록에 적은 이니셜 라이저가있는 경우 집계하면 명시 적으로 초기화되지 않은 각 구성원은 값 초기화 (8.5)이됩니다. [예 :

struct S { int a; char* b; int c; }; 
S ss = { 1, "asdf" }; 

1ss.a, "asdf"ss.b 및 형태 int()의 식의 값 ss.c, 즉 0 초기화한다. ]

값 초기화에 정의되어 있지만,
C++ 03 8.5 이니셜
파라 5

가치 초기화 타입 T의 목적은 의미
- T가 사용자 선언 생성자 (12.1)가있는 클래스 유형 (9 절) 인 경우 T의 기본 생성자가 호출됩니다 (초기화가 잘못된 경우). T가 액세스 할 수없는 경우 ormed) 기본 생성자);
- T가 사용자 선언 생성자가없는 비 (非) 공용 구조체 클래스 유형 인 경우 모든 비 정적 (non-static) 데이터 멤버와 T의 기본 클래스 구성 요소가 값으로 초기화됩니다.
- T가 배열 유형이면 각 요소는 값으로 초기화됩니다.
- 그렇지 않으면 개체가 0으로 초기화됩니다.

관련 문제