C++에서 기본적인 포인터 관련해서 질문 드립니다..
글쓴이: wildwar / 작성시간: 금, 2017/07/21 - 3:49오후
class A { public : A() { setName("AA"); }; void setName(string a) { name = a; }; string get() { return name; }; private: string name; }; class B : public A { public : B() : A() { setName("BB"); }; }; void func(A* cla) { cout << cla << endl; // 2번 cla = new B(); cout << cla << endl; // 3번 } int main() { A * aaaa = new A(); cout << aaaa << endl; // 1번 func(aaaa); cout << aaaa << endl; // 4번 }
코드는 위와 같고,
출력시에는
1, 2, 4번은 동일한 주소, 3번은 다른 주소가 나옵니다.
메모리 관점에서 좋지 않은 코드인건 알지만 실행시켰을 때 제 생각과 다른 결과가 나와서 질문드립니다.
저는 위 코드에서 func 함수로 넘어 갈 때 포인터형 객체를 넘겨주기 때문에
func함수내의 ' cla = new B(); ' 구문에서 새로운 주소값을 할당하고 리턴이 되어도
메인에서 새로운 주소값이 지정되어 있어야 한다고 생각했습니다.
그래서 마지막에 결과가 제 생각과 다르게 나오는 이유를 아무리 생각해도 모르겠는데... 답변주시면 정말 감사하겠습니다.
( 비쥬얼 스튜디오로 작성하였습니다. )
Forums:
https://kldp.org/comment
https://kldp.org/comment/623559#comment-623559
댓글 달기