일기

2 / 28 객체의 정적, 동적할당

김치진주 2023. 2. 28. 15:03

 

클래스 안에서 객체를 멤버로 가질 경우, 정적으로 할당하는게 좋을지 동적으로 할당하는게 좋을지 고민을 조금 해봤다.

 

찾아보기 전 스스로 고민해본 결과는,

동적바인딩 때문에 동적으로 할당한다. 정적으로 선언하면 객체의 다형성을 이용할 수 없으니까.. 그 외의 상황에는 정적으로 선언하는게 좋을 것 같다는 생각이 들었다.

 

그래서 찾아보니..

https://stackoverflow.com/questions/22146094/why-should-i-use-a-pointer-rather-than-the-object-itself

  • 동적할당은 남발하지 말고, 꼭 필요할 때만 하는것이 좋다고 한다. 동적할당이 꼭 필요한 경우에는 스마트 포인터를 사용하라고 한다.
  • 참조자를 사용해라. 객체의 복사본을 전달해도 괜찮다면, 복사본을 넘겨도 좋다.
  • 다형성이 필요할 때 동적할당(포인터) 또는 참조자를 사용해라. 가급적이면 포인터보다는 참조자가 좋다.
  • 객체가 nullptr을 받는 상황이 필요할 때.

원시포인터를 사용하면 RAII를 통한 리소스 관리가 깨질 수 있다고 하는 것 같은데, 스마트포인터에 대해 더 알아봐야겠다.
(98버전 써야해서 못쓰는 기능이긴 하지만..)

다형성을 이용하려면 반드시 포인터형태여야 되는 줄 알았는데, 레퍼런스여도 된다고 한다.