filament里的Blob和Handle,把vector当内存使用和管理对象

filament继续看,对象是如何管理的。。

 

filament里的Blob和Handle,把vector当内存使用和管理对象Blob就是vector<uint8_t>

HandleMap 是无序map,HandleId是uint32_t

也就是对象的数据放在Blob里,生成一个id,而Handle继承HandledBase,里面就一个成员是HandleId的object,好显然这个就是object 的键值

分配是filament里的Blob和Handle,把vector当内存使用和管理对象

先加锁,然后Dp是分配的类型,B是父类或者是接口,把Blob放到map里,且blob的大小和分配的类型一样大,然后返回没什么好说的

二进制数据在Blob里,那么显然Blob.data()就是数据的指针,那么这块数据类型是uint8_t,所以还需要强制转换。。filament这样干的

filament里的Blob和Handle,把vector当内存使用和管理对象

还是加锁,然后查一遍map,找到了把数据取出来,用reinterpret_cast转换,转成Dp也就是本来的数据格式

那么构造呢?数据是这样写入的。。

filament里的Blob和Handle,把vector当内存使用和管理对象

还是加锁,查map,找到了就检查这块本来分配的内存是不是目标类型的内存,然后强制转换成Dp指针,然后用的new 是placement new,没用过,不过大概是直接在addr这块数据上构建对象,调用的是Dp的构造函数,参数是ARGS转发过去。

销毁是也是类似的,不过是手动调用的析构,清理dp可能分配的资源,其次在map里把这个blob删了,内存这个时候vector自己回收。

filament里的Blob和Handle,把vector当内存使用和管理对象

其余还看到了build模式,代理模式。。。慢慢看好了,虽然看不太懂hhhh