На теоретическом уровне пустой указатель не является действительно тем же как пустым указателем в C, который должен сказать, что это содержит адрес памяти и вот именно? Раз так тогда это подобно случаю деления на нуль в Математике, где результат не определен.
можно было сделать следующее для этой строки:
string val = GetParameterValue<string>("parameterName");
Просто удаляют ту первую строку и теперь нет повторения:
var val = GetParameterValue<string>("parameterName");
Не обязательно, что Вы ищете, хотя существует вопрос того, как каждый интерпретирует пустой указатель?
Обработчики сигналов хранятся как слабые ссылки, чтобы объект, на который они ссылаются, не собирался сборщиком мусора (например, после явного удаления обработчика сигнала) только потому, что сигнал все еще летает.
Связанные методы сохраняют ссылку на объект, которому они принадлежат (в противном случае они не могут заполнить self
, см. документацию Python ). Рассмотрим следующий код:
import gc
class SomeLargeObject(object):
def on_foo(self): pass
slo = SomeLargeObject()
callbacks = [slo.on_foo]
print [o for o in gc.get_objects() if isinstance(o, SomeLargeObject)]
del slo
print [o for o in gc.get_objects() if isinstance(o, SomeLargeObject)]
callbacks = []
print [o for o in gc.get_objects() if isinstance(o, SomeLargeObject)]
Вывод:
[<__main__.SomeLargeObject object at 0x15001d0>]
[<__main__.SomeLargeObject object at 0x15001d0>]
[]
Одна важная вещь, которую нужно знать при сохранении weakrefs в обратных вызовах, заключается в том, что вы не можете напрямую связывать методы weakref, потому что они всегда создаются на лету:
>>> class SomeLargeObject(object):
... def on_foo(self): pass
>>> import weakref
>>> def report(o):
... print "about to collect"
>>> slo = SomeLargeObject()
>>> #second argument: function that is called when weakref'ed object is finalized
>>> weakref.proxy(slo.on_foo, report)
about to collect
<weakproxy at 0x7f9abd3be208 to NoneType at 0x72ecc0>