【发布时间】:2011-02-26 06:41:53
【问题描述】:
我不明白为什么下面的代码会产生内存泄漏(我正在使用带有静态类实例的boost::shared_ptr)。有人可以帮我吗?
#include <crtdbg.h>
#include <boost/shared_ptr.hpp>
using boost::shared_ptr;
#define _CRTDBG_MAP_ALLOC
#define NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
static struct myclass {
static shared_ptr<int> ptr;
myclass() {
ptr = shared_ptr<int>(NEW int);
}
} myclass_instance;
shared_ptr<int> myclass::ptr;
int main() {
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF |
_CRTDBG_CHECK_ALWAYS_DF | _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG));
return 0;
}
【问题讨论】:
-
为什么在参数or-list里面还有第二次调用
_CrtSetDbgFlag()? -
这是一种将两个语句合二为一的方法
-
我不明白。为什么不“或”四个标志,而是调用“或”列表中的函数?
-
@sharptooth 最后一个
flag不完全是一个标志,用于查询当前标志状态。我接下来要做的意思是(将这三个标志与当前设置结合起来). -
我真的很想了解全局变量中静态字段的动机。有一个太多的“静态”不是吗?
标签: c++ memory-leaks shared-ptr