Я немного запутался по поводу владения. Давайте возьмем такой пример: я инициализирую 2 объекта: obj1 и obj2 из класса BaseClass, и они указывают на некоторый 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, чтобы поставить зависимости для каждого экземпляра, но проблема в том, что если мне нужно много объектов, таблица будет такой большой.Затем, когда я захочу удалить, зайдите в таблицу, посмотрите все зависимости и удалите их.И дать исключение, если кто-то после удаления попытается вызвать obj2.Затем GC позаботится об этом, чтобы он больше не использовался.
Еще одна идея состояла в том, чтобы использовать слабую ссылку, но, как вы никогда не знаете, когда GC будет работать, может случиться так, что он уничтожит ваш объект, прежде чем вы сможете даже использовать их.