c++에서 new ClassName이랑 new ClassName()의 차이점...
글쓴이: hwanikani / 작성시간: 월, 2011/02/14 - 10:32오전
#include
using namespace std;
class Test
{
private:
int a;
public:
int geta()
{
return a;
}
};
int main()
{
Test* a = new Test;
cout << (*a).geta() << endl;
Test* b = new Test();
cout << (*b).geta() << endl;
}
출력결과:
-842150451
0
--------------------------------------------------------------------------
new className하면 private variable들이 그냥 쓰레기 값으로 남아있는데
new className()하면 private variable들이 0으로 초기화 되버리네요 - _-...
책을 뒤져 봐도 이런 다른점이 있다는 내용은 찾아볼수가 없는데 (new className을 하면 default constructor를 call한다는 내용만 있네요)
왜 이런 다른점이 생기는지 의문이네요...
둘다 default constructor를 call하는거 아닌가요?
Forums:
운입니다.
C, C++는 올바른 것에 대해서 올바른 결과가 나온다는 것을 보장할 뿐 올바르지 않은 것에 대해서 올바르지 않은 결과가 나온다는 것을 보장하지 않습니다.
보장 없습니다.
예를들어 제 환경에서는 둘다 0로 초기화되어서 출력됩니다. 현상을 일반화 하실려면, 다양한 환경의 테스트 결과를 모두 보여주시던지 최소한 테스트한 환경을 보여주셔야겠네요.
환경 : ubuntu x86_64 gcc 4.4.5
Test는 기본 생성자가 제공되지 않기 때문에,
Test는 기본 생성자가 제공되지 않기 때문에, Test의 멤버변수 a는 0일 수도 있고, 임의의 쓰레기 값일 수도 있는임의의 값으로 초기화 될 수 있습니다.
항상 0으로 초기화 시키고 싶으시면 a를 0으로 설정해 주는 기본 생성자를 제공하셔야 합니다.
댓글 달기