That doesn't really work. When the gadget gets destroyed, it's not deleted because the string object still has a reference to it and the gadget doesn't know about the string, so it can't do anything about it.
So the string would have to have a TList connected to it, and the Gadget would have to have yet another link ( it already has one for the list of gadgets and one more if the object is a child of a parent gadget ) and it would probably have to be implemented in an abstract gadget type, which means objects that have no connection to a string still have the link and have to check if it's non-null and remove it if it is. Pretty much as ugly as the solution I mentioned above.
So the string would have to have a TList connected to it, and the Gadget would have to have yet another link ( it already has one for the list of gadgets and one more if the object is a child of a parent gadget ) and it would probably have to be implemented in an abstract gadget type, which means objects that have no connection to a string still have the link and have to check if it's non-null and remove it if it is. Pretty much as ugly as the solution I mentioned above.