Having a factory method, returning a smart pointer is a kind of pattern for ref-counted objects: 1) Events are always created on heap 2) Events memory is managed only by ref-counting smart pointers (how it should be)