Abstract platform widget reference.
Each adapter wraps its native handle (QWidget*, NSView*, jobject, EM_VAL...) in a concrete subclass of this base.
Lifetime
Concrete views are typically owned by the platform's widget tree (QWidget parent-owned, NSView retained by its superview, ...), not by the binding layer. To let BindingEngine survive an early view destruction, every IView emits a destroy signal from its base destructor; the engine subscribes to this signal and automatically releases any binding wired to a view that goes away before the engine itself does.
| void aria::binding::IView::fire_destroy_ |
( |
| ) |
|
|
protectednoexcept |
Invoked by ~IView() to fan out the notification — this is the last-resort trigger.
By the time the base destructor runs, the derived subclass's destructor and its members have already been destroyed, so handlers must treat the view as an opaque address only (exactly what BindingEngine needs: release the per-view subscription bucket, erase the map entry).
Real adapters that wrap a native handle (QWidget, NSView, jobject, ...) are strongly encouraged to call fire_destroy_() themselves as soon as the native handle is torn down, while the subclass state is still valid. That way any handler which does want to touch derived state (e.g. unregister a native event callback) can do so safely. fire_destroy_() is idempotent — a later call from ~IView becomes a no-op thanks to fired_.