Base class for all managed instances in memlite system 더 자세히 ...
#include <instance.hpp>
클래스 | |
| class | vault |
Public 멤버 함수 | |
| 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. | |
by::typeProvidable(으)로부터 상속된 Public 멤버 함수 | |
| 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) |
by::clonable(으)로부터 상속된 Public 멤버 함수 | |
| virtual me * | clone () const =0 |
| virtual me * | cloneDeep () const |
| virtual void | onCloneDeep (const me &from) |
정적 Public 멤버 함수 | |
| static vault & | getVault () |
Protected 멤버 함수 | |
| nbool | _setId (id new1) |
정적 Protected 멤버 함수 | |
| 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.