2012-04-14 4 views
1

이 작동합니다C++ 포인터와 객체 인스턴스화

MyObject *o; 
o = new MyObject(); 

그리고이되지 않습니다

MyObject o = new MyObject(); 

왜?

+0

왜 포인터가 필요합니까? – ipc

+0

그게 내가 이해하려고하는 것입니다. @MPelletier가 나에게 설명해 준 것 같다. – Peter

답변

5

키워드 newreturns a pointer. 객체의 포인터에 할당되어야합니다.

이것은 또한 작동합니다 : EDIT

MyObject o = MyObject(); 

:

세스 주석으로, 위가하는 것과 같습니다

MyObject o; 

기본 생성자 (즉, 매개 변수없이)이 경우라고 생성자가 주어지지 않는다.

+5

또는 'MyObject o;' –

+0

본 적이 있습니다! 저는 Java를 배우고 C++를 배웠습니다. 그래서 객체를 인스턴스화하기 위해'new'가 필요하다는 인상하에있었습니다. – Peter

+5

견적 요다 : "배운 것을 잊어 버려야합니다." ;) –

3

등가물이 아니기 때문에 시도 :

MyObject* o = new MyObject(); 
4

new MyObject()MyObject 유형의 개체에 대한 포인터를 반환합니다. 그래서 실제로는 객체 MyObject*을 할당하려고합니다 (예, 포인터는 객체로 간주 될 수도 있음). 따라서 변수를 MyObject* 또는 호환 가능한 것으로 선언해야합니다 (예 : std::shared_ptr<MyObject>). 과제

MyObject* o = new MyObject(); 

뿐만 아니라 유효하지만

적절한 초기화는

// in C++03 
MyObject* o(new MyObject()); 

// in C++11 
MyObject* o {new MyObject()}; 

이다.