Scoped Connections
В качестве альтернативы вы можете назначить возвращаемое соединение переменной типа signal :: scoped_connection . Это тип соединения , который автоматически отключается при уничтожении или переназначении . Это эффективно ограничивает время жизни сигнального слота для конкретной области.
Например, когда вы переназначаете myConnection, предыдущее соединение автоматически отключается:
scoped_connection myConnection = someObject.Signal.connect(MyHandler);
myConnection = totallyDifferentObject.Signal.connect(MyHandler);
Автоматическое управление соединениями
В нашем проекте мы обычно объявляем переменные-члены как соединения с областью видимости. Таким образом, их область соответствует времени жизни конкретного экземпляра объекта, которому принадлежит. Это удобный способ автоматического отключения любых сигналов, к которым подключен экземпляр объекта, когда он разрушается. Без ограниченных соединений вы должны вручную отключить себя в деструкторе. Если вы забудете отключить экземпляры, когда они уничтожены, вы в конечном итоге вызовете недопустимые обработчики сигналов, что приведет к сбою ваших программ.