我只是在学习C ++,而且我在内存泄漏方面遇到了一些麻烦。我正在使用Visual Studio Express,并且我已启用crtdbg命令在程序关闭时转储内存泄漏。但是,我不能为我的生活,看看为什么这条特定的行被标记为内存泄漏。
我有一个资源类,它包含一个
static std::unordered_map< std::string, std::unique_ptr < Resource >> RESOURCE_LIBRARY;
这包含可用资源的定义,然后工厂方法在需要新资源时根据这些定义生成新资源。
然后我有一个方法填充这个地图,如下所示:
std::unique_ptr< Resource > lResource = std::unique_ptr< Resource >(new Resource(0, 0));
Resource::RESOURCE_LIBRARY["blue"] = std::move(lResource);
我看到的问题是,填充地图的这些行是未清除的内存分配的来源,根据Visual Studio。我尝试过一种方法来解决这个问题:
for (auto it = RESOURCE_SOURCE_LIBRARY.begin(); it != RESOURCE_SOURCE_LIBRARY.end(); it++)
{
it->second.reset();
}
但我仍然收到相同的消息。我相信我必须在这里遗漏/误解,所以任何帮助都会受到赞赏。
修改:
这是一个例子:
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#include <string>
#include <unordered_map>
class Resource
{
public:
Resource(){};
static std::unordered_map<std::string, Resource> LIBRARY;
};
std::unordered_map<std::string, Resource> Resource::LIBRARY;
int main()
{
Resource lResource;
Resource::LIBRARY["first"] = lResource;
Resource::LIBRARY.clear();
_CrtDumpMemoryLeaks();
}
报告内存分配在
行中Resource::LIBRARY["first"] = lResource;