Это исключение защищает вас от неприятной аварии. Обычно это происходит в ответ на такой код:
period const &get_floating_frequency() const
{
return boost::python::call_method<period const &>(
m_self,"get_floating_frequency");
}
И ты получаешь:
ReferenceError: Attempt to return dangling reference to object of type:
class period
В этом случае метод Python, на который ссылается<call_method>, создает новый объект Python. Вы пытаетесь вернуть ссылку на объект C++ (пример<classperiod>), содержащийся внутри и принадлежащий этому объекту Python. Поскольку названный метод возвращает совершенно новый объект, единственная ссылка на него сохраняется в течение<get_floating_frequency()>выше. Когда функция вернется, объект Python будет уничтожен, уничтожив экземпляр<class
period>и оставив возвращенную ссылку висящей. Это уже неопределенное поведение, и если вы попытаетесь что-то сделать с этой ссылкой, вы, вероятно, вызовете сбой. Повышаю. Python обнаруживает эту ситуацию во время выполнения и делает исключение вместо того, чтобы позволить вам сделать это.