본문 바로가기

Coding Note

setting polymorphic member variable.

다형성을 가지는 멤버변수를 외부에서 설정해줘야 하는 상황이 있을 수 있다.

 

class A{

private:

Base* mVar;

 

public:

void Set_c_style(Base** newVar){

// delete mVar,

 

if (newVar){

mVar = *newVar;

*newVar = NULL;

}

}

 

void Set_cpp_style(std::unique_ptr<Base>& newVar){

// delete mVar,

 

if (newVar){

mVar = newVar.get();

newVar.release();

}

}

};

 

둘 중 어느게 나은가는 좋고 나쁨의 관점과 사용하는 상황에 따라 다르지만, 개인적으로 cpp_style이 문제를 일으킬 여지가 적다는 점에서 선호한다.

게다가 c_style setter는 배열의 포인터와 혼동될 수 있고, 파라미터를 전달하기 위해 콜러의 입장에서 변수를 만들어두어야 한다.

 

Base* ptr = new Driven(...);

Set_c_style(&ptr);

 

보다는

 

Set_cpp_style( std::unique_ptr<Base>(new Driven(...)) )

 

가 더 깔끔하지 않은가?

unique_ptr 생성을 위한 오버헤드가 크지않기 때문에 그리 부담되는 스타일은 아니라고 생각한다.