Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > класс по возврату значения из ф-ции: в чем ошибка?


Автор: sinmaster 20.9.2008, 12:29
привет. 
у меня есть класс, описывающий семантику инструкции по возврату значения из определённой пользователем функции:
Код

class ReturnStatement : public Statement {
    const boost::weak_ptr<Function> _pParentFunction;
    const boost::shared_ptr<Node>  _pNodePtr;
public:
    ReturnStatement(const boost::shared_ptr<Function> &pParentFunction, const boost::shared_ptr<Node> &pNodePtr): 
    Statement(), _pParentFunction(pParentFunction), _pNodePtr(pNodePtr) { }
    
    virtual void exec() const {       
        if (_pNodePtr != NULL) {
            _pParentFunction.lock()->setResult(_pNodePtr->getValue());
        }
        globalFlow = FLOW_RETURN;
    }
};

если представить что выражение pNodePtr само по себе включает вызов(ы) этой же самой pParentFunction ф-ции (т.е. ф-ция pParentFunction является рекурсивной), то почему-то _pNodePtr никогда не удаляется. если же _pNodePtr объявить как weak_ptr<Node>, то после первого своего же вызова эта ф-ция прекратит своё исполнение, но зато _pNodePtr будет корректно удалён вместе со своими вложенными нодами (смотрел в дебаге в консоль).
как правильно заимплементировать этот класс, подскажите, плз.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)