Base class for all managed instances in memlite system. More...
#include <instance.hpp>
Classes | |
| class | vault |
Public Member Functions | |
| instance (id newId) | |
| instance (const me &rhs) | |
| me & | operator= (const me &rhs)=default |
| void * | operator new (size_t sz) noexcept |
| void | operator delete (void *pt, size_t sz) noexcept |
| virtual id | getId () const |
| virtual nbool | isHeap () const |
| Checks if this instance is allocated on the heap. | |
| const life * | getBindTag () const |
| Returns a pointer to the associated life object for reference counting. | |
Public Member Functions inherited from by::typeProvidable | |
| nbool | operator== (const me &rhs) const |
| nbool | operator!= (const me &rhs) const |
| virtual const type & | getType () const =0 |
| nbool | isSub (const type &it) const |
| nbool | isSub (const type *it) const BY_SIDE_FUNC(isSub) |
| nbool | isSub (const me &it) const |
| nbool | isSub (const me *it) const BY_SIDE_FUNC(isSub) |
| nbool | isSuper (const type &it) const |
| nbool | isSuper (const type *it) const BY_SIDE_FUNC(isSuper) |
| nbool | isSuper (const me &it) const |
| nbool | isSuper (const me *it) const BY_SIDE_FUNC(isSuper) |
| template<typename T > | |
| nint | isSub () const |
| template<typename T > | |
| nint | isSuper () const |
| template<typename T > | |
| T * | cast () |
| template<typename T > | |
| const T * | cast () const BY_CONST_FUNC(cast< T >()) virtual void *cast(const type &to) |
| Safe cast to target type using type hierarchy information. | |
| const void * | cast (const type &to) const BY_CONST_FUNC(cast(to)) void *cast(const type *it) BY_SIDE_FUNC(cast) |
Public Member Functions inherited from by::clonable | |
| virtual me * | clone () const =0 |
| virtual me * | cloneDeep () const |
| virtual void | onCloneDeep (const me &from) |
Static Public Member Functions | |
| static vault & | getVault () |
Protected Member Functions | |
| nbool | _setId (id new1) |
Static Protected Member Functions | |
| static instancer * | _getMgr () |
Friends | |
| class | memliteInternal |
Base class for all managed instances in memlite system.
Objects managed by memlite's custom memory pool must inherit from instance. Only by inheriting instance can objects be referenced through binder as weak or strong pointers. Instances are identified through id.
The weakest part of memlite is this id assignment algorithm. Instance creation is done by instancer which manages the memory pool. The instancer pushes the instance address and id to a map in the internal vault class. When instance::operator new() is called, it internally accesses vault using code like map[this] to retrieve the id value.
While seemingly fine, it has many disadvantages:
The initial implementation used only vector managed as FIFO, but when creating other objects inside a constructor, the order of added ids no longer follows FIFO, causing ID混乱 issues.
Returns a pointer to the associated life object for reference counting.
The life object is used by binder and watcher to manage the instance's lifecycle.
life object, or nullptr if none is associated. Checks if this instance is allocated on the heap.