Hmmm... Do you mean the Grid somehow owns the objects?
TCustomGrid allocates some resources for its internal management and releases them with FreeThenNil.
From destructor TCustomGrid.Destroy in grids.pas
FreeThenNil(FColumns);
FreeThenNil(FGCache.AccumWidth);
FreeThenNil(FGCache.AccumHeight);
FreeThenNil(FCols);
FreeThenNil(FRows);
Moving this code after the inherited destroy or maybe use FreeAndNil "fix" the bug (yes, it's a bug...just try a debug session)
You should separate data/logic and GUI as much as possible. Copy the data to/from the GUI controls. The life-time of a control should not depend so much on the life-time of data.
I recommend that you let the Owner of the Grid handle its life-time. You can show/hide it with Visible := True/False, and reuse them as needed.
This is the best way resource-wise, too. Creating a GUI control takes longer that just showing an existing control.
Yeah, create and release a resource requires more time, it is true, but hide / show it only when required is a contorted solution at least in my case (too much works for nothing). Anyway i fix the problem simply called PerformTab before the Free (a perfect solution for me) but anyone who tries to free a focused grid will take the same issue.