Ok letto il codice:

1)perchè dichiari nel costruttore il m_TagsLoadData che poi non usi?

codice:
CSapLoadType::~CSapLoadType()
{
	for(int i = 0; i < m_TagsLoadData.GetSize(); i++)
		delete m_TagsLoadData[i];
	m_TagsLoadData.RemoveAll();
	CTypedPtrArray<CPtrArray, tagLoadData*> m_TagsLoadData;
}
2)
codice:
tagLoadData* CSapLoadType::getByID(int ID)
{
	if(m_TagsLoadData.GetCount() <= ID)
		return NULL;
	tagLoadData* LoadData = m_TagsLoadData[ID];
	return LoadData;
}
Questo ritorna l'oggetto con l'array in posizione ID credo no?

ma mi sorge un dubbio:

codice:
pType->SetTagsLoadData(*pLoadDataArray);
qui chiami il SetTagsLoadData sul puntatore pType

codice:
pType = pCase->getByID(*nBLType);
qui assegni a pType il ritornodella funzione getByID fatta sul puntatore pCase

in che modo le due cose dovrebbero fare la stessa cosa?
forse sono io che non capisco.. prova a spiegare meglio la situazione..