2011-08-16 2 views

답변

2

개체의 경우 차이점이 없습니다. 각 개체는 기본 생성자를 호출합니다.

"일반 오래된 데이터"(POD) 유형에는 큰 차이가 있습니다. 첫 번째 양식은 초기화되지 않은 데이터 (메모리에 남아있는 것이 무엇이든)이고 다른 하나는 알려진 기본값을 제공합니다. 유형이 아닌 POD 경우 정확한 예를 들어

int* p1 = new int; // *p1 == ??? 
int* p2 = new int(); // *p2 == 0 
2

는 차이가 없다. 삼가지 경우 하나 개의 차이가있다 :

1는 기본 유형이다 :

int* pi = new int(); 

이 경우에,()는 디폴트 값으로 초기화 될 필요가 있다는 것을 의미한다.

int* ai = new int[42](); 

가 동일한 의미 : INT 기반 유형 및 플로팅 유형의 경우, 그것은 기본 유형의 배열의 0이

2 * 파이 ==, 그래서 여기에 0의 모든 이 예에서 * ai에서 * (ai + 41)까지의 모든 요소는 0과 같습니다.

3. 유형이 POD 인 경우 , 모든 구성원에 대해 기본 초기화가 수행됩니다. 그런데

, 당신은 또한 초기화 목록에 기본 유형의 디폴트 값을 초기화 할 수 있습니다 : 당신의 예에서

class myType 
{ 
public: 
    myType() : m_k(), m_t(){} // m_k == 0 && m_t ==0 

private: 

    int m_k; 
    double m_t; 
}; 

을,의 의미는() 동일하지만 비 기본 유형, 기본 생성자입니다 암시 적으로 불리며() 필요하지 않습니다. 일관성을 유지하기 위해 모든 객체 생성에 동일한 구문을 사용하기 때문에 여전히 사용됩니다. (즉, C++ 0x의 새로운 초기화 구문을 사용하면 모든 초기화 작업에 동일한 구문을 사용하는 것이 훨씬 쉬워집니다.

+0

정확한 예를 들면, 그것은 차이를 만든다. 그것은'Object'의 정의에 달려 있습니다. 즉, 특별한 클래스 *가 아닌 것은 무엇입니까? 만약 그것들이 다른 POD라면, 그것들은 기본 생성자를 가지고 있다면 그것은 전혀 중요하지 않습니다. –

+0

아아, 예, 포드 케이스 XD에 대해 잊어 버렸습니다. – Klaim

관련 문제