2010-07-30 5 views
4

나는 스마트 포인터를 향상시키는 방법을 배우고 있지만 약간의 상황에 대해서는 약간 혼란 스럽다. 각 상태가 단일 업데이트 방법으로 구현되는 상태 시스템을 구현한다고 가정 해 보겠습니다. 각 상태는 그 자체를 반환하거나 새로운 상태 개체를 만들 수 있습니다스마트 포인터를 "this"와 함께 사용

struct state 
{ 
    virtual state* update() = 0; // The point: I want to return a smart pointer here 
}; 

struct stateA : public state 
{ 
    virtual state* update() { return this; } 
}; 

struct stateB : public state 
{ 
    virtual state* update() { if(some condition) return new stateA() else return this; } 

을};

상태 머신 루프는 다음과 같이 보일 것이다 :

while(true) 
    current_state = current_state->update(); 

당신은 스마트 포인터를 높일 사용하려면이 코드를 변환 할 수 있을까요? 나는 무엇을 해야할지 모르기 때문에 "돌아 오는"부분에 관해서는 다소 혼란 스럽다. 기본적으로 "return boost :: shared_ptr (this);"과 같은 것을 반환하는 것은 쓸모가 없다고 생각합니다. 안전하지 않기 때문에. 어떻게해야합니까?

답변

6

클래스를 boost::enable_shared_from_this<>에서 상속해야합니다. Boost의 예제 인 here을 확인하십시오.

관련 문제