GetComponentsInChildren contains null elements when fetching MeshRenderers

Hi all,
there seems to be something that is eluding me in how meshRenderers are destroyed. I have a script that instantiates a child object based on a prefab. Sometimes, that script destroys the game object it instantiated and instantiates a new one. Every time, I instantiate a new game object, I use GetComponentsInChildren to get all the meshRenderers in the child objects.
For some reason, even after destroying the first gameObject I instantiated, GetComponentsInChildren() still returns the meshRenderers that should have been destroyed. Eventually, GetComponentsInChildren() will contain null elements (the meshRenderers from the previously destroyed game objects get deallocated but are still in the children list?). I even tried specifically destroying the child mesh renderers but it doesn’t change anything.

Here is the piece of code:

public List<MeshRenderer> meshRenderers { get; protected set; }
GameObject m_supportModel = null;
public void InstantiateSupportModel(GameObject supportModelPrefab) {
  if (m_supportModel != null)
     // I tried forcing the destruction of these meshRenderers just in case, but it doesn't change anything
     foreach (MeshRenderer meshRenderer in m_supportModel.GetComponentsInChildren<MeshRenderer>())
  m_supportModel = Instantiate(supportModelPrefab);
  meshRenderers = new List<MeshRenderer>(GetComponentsInChildren<MeshRenderer>());
  // After the second time this method is called, meshRenderers will contain meshRenderers
  // from the both instantiated gameObjects, including the one that was destroyed
  //The third time, it usually contains null references, meshRenderers from the second
  // instantiated game object (which was just destroyed) and the newly created meshRenderers

Any help is appreciated. Thanks!

destroyed gameobjects are not immediately destroyed but marked and destroyed at the end of the frame. that’s what DestryImmediate is for.