CResource: Make BuildDependencyTree() return a unique_ptr

Makes the functions more memory safe in terms of freeing memory in
exceptional paths .
This commit is contained in:
Lioncash
2020-06-11 18:25:35 -04:00
parent eb8ca98a8a
commit ce315280c3
24 changed files with 82 additions and 93 deletions

View File

@@ -23,16 +23,16 @@ CGameArea::~CGameArea()
delete mScriptLayers[iSCLY];
}
CDependencyTree* CGameArea::BuildDependencyTree() const
std::unique_ptr<CDependencyTree> CGameArea::BuildDependencyTree() const
{
// Base dependencies
CAreaDependencyTree *pTree = new CAreaDependencyTree();
auto pTree = std::make_unique<CAreaDependencyTree>();
std::set<CAssetID> MatTextures;
mpMaterialSet->GetUsedTextureIDs(MatTextures);
for (auto Iter = MatTextures.begin(); Iter != MatTextures.end(); Iter++)
pTree->AddDependency(*Iter);
for (const auto& id : MatTextures)
pTree->AddDependency(id);
pTree->AddDependency(mPathID);
@@ -43,8 +43,8 @@ CDependencyTree* CGameArea::BuildDependencyTree() const
}
// Extra deps
for (uint32 iDep = 0; iDep < mExtraAreaDeps.size(); iDep++)
pTree->AddDependency(mExtraAreaDeps[iDep]);
for (const auto& dep : mExtraAreaDeps)
pTree->AddDependency(dep);
// Layer dependencies
std::vector<CAssetID> DummyDeps;

View File

@@ -65,9 +65,9 @@ class CGameArea : public CResource
std::vector< std::vector<CAssetID> > mExtraLayerDeps;
public:
CGameArea(CResourceEntry *pEntry = nullptr);
explicit CGameArea(CResourceEntry *pEntry = nullptr);
~CGameArea();
CDependencyTree* BuildDependencyTree() const override;
std::unique_ptr<CDependencyTree> BuildDependencyTree() const override;
void AddWorldModel(CModel *pModel);
void MergeTerrain();