![]() |
That exception is protecting you from causing a nasty crash. It usually happens in response to some code like this:
period const &get_floating_frequency() const { return boost::python::call_method<period const &>( m_self,"get_floating_frequency"); }
And you get:
ReferenceError: Attempt to return dangling reference to object of type: class period
In this case, the Python method invoked by call_method
constructs a new Python object. You're trying to return a reference to a
C++ object (an instance of class period) contained within and owned by that
Python object. Because the called method handed back a brand new object,
the only reference to it is held for the duration of get_floating_frequency() above. When the function returns, the Python
object will be destroyed, destroying the instance of class
period, and leaving the returned
reference dangling. That's already undefined behavior, and if you try to
do anything with that reference you're likely to cause a crash. Boost.Python
detects this situation at runtime and helpfully throws an exception instead
of letting you do that.