가능한 중복 :
Do the parentheses after the type name make a difference with new?괄호를 사용하여 인스턴스화 된 객체와 괄호없이 인스턴스화 된 객체의 차이점은 무엇입니까?
가정 obj가 아닌 특수 학급
Obj* obj = new Object;
Obj* obj = new Object();
01 대
정확히 차이점은 무엇입니까?
가능한 중복 :
Do the parentheses after the type name make a difference with new?괄호를 사용하여 인스턴스화 된 객체와 괄호없이 인스턴스화 된 객체의 차이점은 무엇입니까?
가정 obj가 아닌 특수 학급
Obj* obj = new Object;
Obj* obj = new Object();
01 대
정확히 차이점은 무엇입니까?
개체의 경우 차이점이 없습니다. 각 개체는 기본 생성자를 호출합니다.
"일반 오래된 데이터"(POD) 유형에는 큰 차이가 있습니다. 첫 번째 양식은 초기화되지 않은 데이터 (메모리에 남아있는 것이 무엇이든)이고 다른 하나는 알려진 기본값을 제공합니다. 유형이 아닌 POD 경우 정확한 예를 들어
int* p1 = new int; // *p1 == ???
int* p2 = new int(); // *p2 == 0
는 차이가 없다. 삼가지 경우 하나 개의 차이가있다 :
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의 새로운 초기화 구문을 사용하면 모든 초기화 작업에 동일한 구문을 사용하는 것이 훨씬 쉬워집니다.
정확한 예를 들면, 그것은 차이를 만든다. 그것은'Object'의 정의에 달려 있습니다. 즉, 특별한 클래스 *가 아닌 것은 무엇입니까? 만약 그것들이 다른 POD라면, 그것들은 기본 생성자를 가지고 있다면 그것은 전혀 중요하지 않습니다. –
아아, 예, 포드 케이스 XD에 대해 잊어 버렸습니다. – Klaim
http://stackoverflow.com/questions/620137/do-the-parentheses-after-the-type-name-make-a-difference-with-new/620402 – buck