다형성을 가지는 멤버변수를 외부에서 설정해줘야 하는 상황이 있을 수 있다.
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 생성을 위한 오버헤드가 크지않기 때문에 그리 부담되는 스타일은 아니라고 생각한다.
'Coding Note' 카테고리의 다른 글
PrimitiveDrawInterface로 시각화도구 만들기 (0) | 2017.05.03 |
---|---|
UE4, problem of the hierarchical scale transformation (0) | 2015.05.16 |
duplicated element name of different enums (0) | 2014.04.29 |
anonymus union (0) | 2014.03.07 |
c++ CRTP(curiously recurring template pattern) (0) | 2014.03.02 |