Skip to content

[Runtime] proxy 内存管理 #246

Description

@BenzzzX

当前 proxy 使用的是 observe 模式,也就是不参与所有权管理。
为了扩展其使用,需要添加所有权的扩展能力,基于目前的实现,有一些改动方案。
方案1:使用 trait 技法,将 storage 参数化

template<typename Storage>
class XXXProxy
{
//GENERATED_BODY
Storage self = nullptr;
const ${record.short_name}_VTable* vtable = nullptr;

/*ctor*/
template<typename T>
${record.short_name}(T& obj) noexcept
    : self(&obj)
    , vtable(${record.short_name}_VTableTraits<T>::get_vtable())
{
}
//...

这样带来的问题是用户侧需要手动模板化proxy,而优点是 Storage 比较自由
方案2:固定支持 shared 以及 observe 类型

//GENERATED_BODY
variant<void*, shared_ptr<void>> storage;
void* get_self();
const ${record.short_name}_VTable* vtable = nullptr;

需要敲定一下方案以进一步推进此功能

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions