Ganz einfach:
Du füllst in einen Eimer Wein, dann schaust du eine Weile nicht hin und ein Anderer säuft den Wein aus und wieder ein Anderer füllt Wasser rein, weil der Eimer ja leer war (ist also Platz gewesen).
Was findest du jetzt in dem Eimer? Aha.
Du hast doch schon selber festgestellt, dass du dir nur eine Referenz (Pointer) auf das Objekt hast und damit kann man das Objekt nicht festhalten, wenn es freigegeben wird.
Ein anderes Beispiel ist eine Visitenkarte von Peter Lustig. Der wohnt nicht in oder auf der Visitenkarte, sondern das ist nur eine Referenz auf seinen Wohnort.
Zieht der Peter jetzt dort aus und dann ein Anderer wieder ein, dadurch wird dieser Andere nicht automatisch zu Peter Lustig.
Mal abgesehen davon das die Beispiele nicht besonders gut gewählt sind, finde ich das ist ein sehr schlechtes Laufzeitverhalten. Wenn ich eine Flasche Wein habe, die jemand austrinkt und danach Wasser reinfüllt, und diese mir dann als Wein verkauft, ist das nichts anderes als Etikettenschwindel.
Zum zweiten Beispiel: Wenn ich eine Referenz auf einen Wohnort von Peter Lustig habe, dann zieht da nach Peter Lustig nicht einfach ein Kaugummi ein, sondern eine andere Person (gleicher Typ).
Ich weiß aber was du damit sagen willst. Dieses Laufzeitverhalten ist dennoch unglücklich und extrem gefährlich. So kann man sich nie darauf verlassen, dass das worauf man zugreift auch das ist was man ursprünglich annahm (insbesondere wenn man mit externen Bibliotheken arbeitet). Leider ist das in vielen Bereichen von Delphi so (siehe Reference Counting von Interfaces, das wohl nur noch Delphi so betreibt).
Naja, da kann man wohl nichts machen.
Vielen Dank für eure Hilfe.