我对所有权感到有些困惑, 让我们举个例子: 我从类BaseClass初始化2个对象:obj1和obj2 他们指向一些obj_ptr:
obj1--->obj1_ptr
obj2--->obj2_ptr
或者说它们指向创建数据的某个内存区域。 我想对obj1说:从现在起我想要你照顾obj2 它将类似于:
def getDependency(obj1):
return[obj1_ptr,obj2_ptr]
所以会发生这样的事情:
obj1--->obj1_ptr---.
|
obj2--->obj2_ptr<--'
一旦调用了obj1的删除,就会删除obj2_ptr,obj1_ptr及其自身 现在问题在于obj2会指向内存中的某些位置,如果它保持不变 并且不会破坏,它会造成内存泄漏。
如何管理授予所有权的班级实例的生命周期?
我想要做的是创建一个类OwnerShipBase来放置所有权, 实际上使用hashTable创建一个缓存是为每个实例放置dependecies, 但问题是,如果我有很多obj,那桌子就会那么大。然后,当我想删除 进入表格查看所有家属并删除它们。如果有人,请给出例外 删除后尝试调用obj2。一旦它不被使用,GC将会照顾它 更多。
另一个想法是使用弱引用但是你永远不知道什么时候GC会运行 在您甚至可以使用它们之前,它可能会破坏您的对象。
答案 0 :(得分:0)
创建一个负责c分配内存的包装器对象,让其他对象使用该包装器进行所有访问。它将保持您的代码干净,并让python运行时处理所有依赖项/ refcounting / etc。
类似的东西:
obj1 --\
=> wrapper -> ptr
obj2 --/
如果你想在对象仍在使用时释放内存,你可以随时释放包装器对象中的底层指针,然后如果某些东西试图在之后访问它,则抛出一个python异常。