The Accessor object of std.h data objects contains a
HandledEvent, which is used to fire events on the Data object at run-time during calls to getContent(), and so on. A call to
ENGINE_EVENT_GET_PORT is made during attach(), or to
ENGINE_EVENT_ADD_PORT during create(), and either call attaches the
HandledEvent to the port. This means that the framework now has a pointer to the Accessor-owned
HandledEvent, allowing it to update the targeted Data object behind the scenes whilst the owner does not have the thread, and thus whenever the owner does have the thread its accessors are pointing at the right Data objects. This gives maximum performance for data access. The upshot of this is that, once an Accessor has been attached, it cannot be moved in memory, or the framework's pointer would no longer be valid. Thus, any attempt to copy the object once it is attached raises an error.