c++ - Using t( *this ) results RuntimeError, while t( std::ref( *this ) does not -
i have following example:
#include <iostream> #include <functional> struct tmr { typedef std::function<void(void)> callback; callback cb; tmr(callback cb_) : cb( cb_ ) { } void timeout() { cb(); } }; struct obj { struct tmr t; obj() : t( std::ref( *this ) ) { } void operator () () { std::cout << __func__ << '\n'; } }; int main(int argc, char *argv[]) { obj o; o.t.timeout(); return 0; }
this runs fine, had constructor of obj
as:
obj() : t( *this )
which results in runtime error. guess because reference member function stored in callback, , not object call member on.
what don't understand std::ref
when obj() : t(std::ref(*this))
, why makes program work. can shed light on what's going on , how works ?
when don't pass reference you're copying *this
before t
has been initialised - means you're copying t
, callback member before they've been initialised, undefined behaviour.
(and copy constructor of std::function
try copy what's pointed uninitialised pointer, causes actual crash.)
Comments
Post a Comment