A가 base-class이면 포인터를 쓸 수 밖에 없을듯 하네요. 사실 이경우 말고는 대부분 포인터 없이 해결 할 수 있습니다. new를 안 쓸 수 있으면 안쓰도록 노력해야겠지요.
프로그램 디자인상(유닛 테스트가 용이하도록 하기위해) A를 B가 직접 생성하기보다 생성된 A를 넘겨 받아야 하는 경우가 있는데 그때도 포인터가 필요해집니다. 하지만 C++11에서는 move semantic이 있으므로 이마저도 포인터 없이 더 간결하게 구현 할 수 있습니다.
포인터가 아니면 안될 이유가 있거나(복사할 수 없는
포인터가 아니면 안될 이유가 있거나(복사할 수 없는 객체 등), 해더파일에 다른 클래스의 해더파일을 인클루드하지 않기 위해서 그렇게 하는 경우도 많지요.
특정 코드에서 왜 포인터를 썼는가는 그 코드를 봐야 알 수 있겠지요.
A가 base-class이면 포인터를 쓸 수 밖에
A가 base-class이면 포인터를 쓸 수 밖에 없을듯 하네요. 사실 이경우 말고는 대부분 포인터 없이 해결 할 수 있습니다. new를 안 쓸 수 있으면 안쓰도록 노력해야겠지요.
프로그램 디자인상(유닛 테스트가 용이하도록 하기위해) A를 B가 직접 생성하기보다 생성된 A를 넘겨 받아야 하는 경우가 있는데 그때도 포인터가 필요해집니다. 하지만 C++11에서는 move semantic이 있으므로 이마저도 포인터 없이 더 간결하게 구현 할 수 있습니다.
다형성
다형성
B 클래스가 A클래스의 인스턴스를 직접 맴버 변수로
B 클래스가 A클래스의 인스턴스를 직접 맴버 변수로 갖는다면
무조건 B 클래스의 인스턴스가 생성될 때에(생성자 함수가 호출될 때에) A클래스의 인스턴스도 생성을 해야 합니다.
(그리고 경우에 따라서는 반드시 초기화 리스트를 써야만 할 겁니다)
하지만 실제 인스턴스 대신에 포인터를 맴버 변수로 갖는다면
언제든지 프로그래머가 원하는 때에 클래스 A의 실제 인스턴스를 생성하고 소멸시킬 수 있습니다.
댓글 달기