c ++删除静态对象

时间:2015-11-28 10:40:35

标签: visual-studio c++11 memory

我只是在学习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;

0 个答案:

没有答案