class 관련해서

asleea의 이미지

다른 사람들이 코딩한 것들을 보면

보통 class내부에 class를 맴버로 갖을때, class의 인터턴트를 넣어주는 것이 아니라 포인터를 넣어주고 new를 해주는 경우가 많은데

궂이 그렇게 하는 이유가 있나요?, 그냥 인스턴트를 가지고 있어도 상관없을 것 같은데

class A{
};
 
class B{
   A* a;
};
klara의 이미지

포인터가 아니면 안될 이유가 있거나(복사할 수 없는 객체 등), 해더파일에 다른 클래스의 해더파일을 인클루드하지 않기 위해서 그렇게 하는 경우도 많지요.
특정 코드에서 왜 포인터를 썼는가는 그 코드를 봐야 알 수 있겠지요.

아르아의 이미지

A가 base-class이면 포인터를 쓸 수 밖에 없을듯 하네요. 사실 이경우 말고는 대부분 포인터 없이 해결 할 수 있습니다. new를 안 쓸 수 있으면 안쓰도록 노력해야겠지요.
프로그램 디자인상(유닛 테스트가 용이하도록 하기위해) A를 B가 직접 생성하기보다 생성된 A를 넘겨 받아야 하는 경우가 있는데 그때도 포인터가 필요해집니다. 하지만 C++11에서는 move semantic이 있으므로 이마저도 포인터 없이 더 간결하게 구현 할 수 있습니다.

익명 사용자의 이미지

다형성

익명 사용자의 이미지

B 클래스가 A클래스의 인스턴스를 직접 맴버 변수로 갖는다면
무조건 B 클래스의 인스턴스가 생성될 때에(생성자 함수가 호출될 때에) A클래스의 인스턴스도 생성을 해야 합니다.
(그리고 경우에 따라서는 반드시 초기화 리스트를 써야만 할 겁니다)

하지만 실제 인스턴스 대신에 포인터를 맴버 변수로 갖는다면
언제든지 프로그래머가 원하는 때에 클래스 A의 실제 인스턴스를 생성하고 소멸시킬 수 있습니다.