If you decide you no longer want your code to be called whenever a signal is
emitted, you must remember the return value of connect(), which we've been
ignoring until now.
connect() returns a sigc::connection object, which has a disconnect() member method. This does just what you think it does.
Also, sigc++ 3.6 adds sigc::scoped_connection.
A scoped connection can be constructed or assigned from a normal/unscoped sigc::connection,
whereupon it effectively takes ownership of the connection, and will automatically disconnect()
it when the sigc::scoped_connection is destroyed (goes out of scope) or reassigned.
This lets you tie whether a slot is called to the lifetime of a scoped connection object, e.g. as a class member,
instead of having to manually disconnect. Scoped connections can be put in containers, or made ref-counted via std::shared_ptr.
See the sigc::scoped_connection class documentation for examples.