나는 스마트 포인터를 향상시키는 방법을 배우고 있지만 약간의 상황에 대해서는 약간 혼란 스럽다. 각 상태가 단일 업데이트 방법으로 구현되는 상태 시스템을 구현한다고 가정 해 보겠습니다. 각 상태는 그 자체를 반환하거나 새로운 상태 개체를 만들 수 있습니다스마트 포인터를 "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);"과 같은 것을 반환하는 것은 쓸모가 없다고 생각합니다. 안전하지 않기 때문에. 어떻게해야합니까?