我正在编写一个内容管理系统,以避免在我的游戏引擎中重复加载相同的纹理。以下是从先前加载的对象中检索内容或在没有可用对象时加载新对象的功能。
template <class T>
T* GetContent(const char* path) {
// Check if it already exists, if yes return it
for (ContentEntry& entry : m_ContentList) {
// Same Type?
if (strcmp(entry.Type, T::GetType()) == 0)
// Same Path?
if (strcmp(entry.C->GetPath(), path) == 0)
return (T*)entry.C;
}
// Since it doesn't exist, create it
ContentEntry contentEntry (
T::GetType(),
(Content*)new T(path));
// Add it to the list
m_ContentList.push_back(contentEntry);
// And Return it
return (T*)contentEntry.C;
}
这是用于存储内容条目的结构和存储它们的向量。
struct ContentEntry {
const char* Type;
Content* C;
ContentEntry(const char* type, Content* c) :
Type(type),
C(c)
{ }
~ContentEntry() {
delete C;
}
};
std::vector<ContentEntry> m_ContentList;
每当此函数尝试返回值时,应用程序就会崩溃。当我将 contentEntry 更改为一个指针(适当地更新它周围的代码)时,它会毫无问题地返回,但我必须将整个向量更改为指向 ContentEntry 指针,然后手动删除它们,如果可能的话我想避免这样做。我怎样才能使这个功能正常工作?
此外,当使用指针并单步执行 foreach 循环时,向量似乎无缘无故急剧增长,我该如何阻止这种情况发生?
编辑:现在修复了我稍后会改进的崩溃问题,但失控的向量仍然存在。
Edit2:在退出函数后,增长的向量似乎就消失了,所以我只是将某些东西标记为答案。