vld为什么会觉得static对象是内存泄露呢???

wangsiyuanoo 2014-03-05 10:35:32

static CTest& getInstance()
{
static CTest g_instance; //用vld检测内存泄露会指示这行代码有内存泄露
return g_instance;
}


如何不让VLD报这种类型的内存泄露呢???
因为代码中有很多地方会用这种写法
...全文
315 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangsiyuanoo 2014-03-05
  • 打赏
  • 举报
回复
引用 4 楼 FrankHB1989 的回复:
[quote=引用 3 楼 wangsiyuanoo 的回复:] 谢谢 楼上两位 发现问题了 是在类里有个string对象 然后我对整个类进行了memset 删除这个就没有了 那请问: 如果一个类有string vector等这些stl对象 想对类整个初始化一下 而不是一个个的初始化 怎么做呢???
构造函数干什么吃的。[/quote] 我就是在构造函数中初始化的 比如 struct Test { string str; int i; Test() { memset( this, 0, sizeof(Test) ); //有什么办法可以替换掉memset 但也可以达到一次性初始化的目的 } }
FrankHB1989 2014-03-05
  • 打赏
  • 举报
回复
引用 3 楼 wangsiyuanoo 的回复:
谢谢 楼上两位 发现问题了 是在类里有个string对象 然后我对整个类进行了memset 删除这个就没有了 那请问: 如果一个类有string vector等这些stl对象 想对类整个初始化一下 而不是一个个的初始化 怎么做呢???
构造函数干什么吃的。
wangsiyuanoo 2014-03-05
  • 打赏
  • 举报
回复
谢谢 楼上两位 发现问题了 是在类里有个string对象 然后我对整个类进行了memset 删除这个就没有了 那请问: 如果一个类有string vector等这些stl对象 想对类整个初始化一下 而不是一个个的初始化 怎么做呢???
Johnblx 2014-03-05
  • 打赏
  • 举报
回复
引用 楼主 wangsiyuanoo 的回复:

static CTest& getInstance()
{
	static CTest g_instance; //用vld检测内存泄露会指示这行代码有内存泄露
	return g_instance;
}
如何不让VLD报这种类型的内存泄露呢??? 因为代码中有很多地方会用这种写法
能把类的声明以及构造函数的定义贴一下吗?
__cc__ 2014-03-05
  • 打赏
  • 举报
回复
静态类中有指针分配吧
ganmaojiushijiu 2014-03-05
  • 打赏
  • 举报
回复
引用 3 楼 wangsiyuanoo 的回复:
谢谢 楼上两位 发现问题了 是在类里有个string对象 然后我对整个类进行了memset 删除这个就没有了 那请问: 如果一个类有string vector等这些stl对象 想对类整个初始化一下 而不是一个个的初始化 怎么做呢???
string vector 不能使用memset函数一次性初始化,会出问题的
menzi11 2014-03-05
  • 打赏
  • 举报
回复
引用 5 楼 wangsiyuanoo 的回复:
[quote=引用 4 楼 FrankHB1989 的回复:] [quote=引用 3 楼 wangsiyuanoo 的回复:] 谢谢 楼上两位 发现问题了 是在类里有个string对象 然后我对整个类进行了memset 删除这个就没有了 那请问: 如果一个类有string vector等这些stl对象 想对类整个初始化一下 而不是一个个的初始化 怎么做呢???
构造函数干什么吃的。[/quote] 我就是在构造函数中初始化的 比如 struct Test { string str; int i; Test() { memset( this, 0, sizeof(Test) ); //有什么办法可以替换掉memset 但也可以达到一次性初始化的目的 } }[/quote] 吓死我了!!!!
buyong 2014-03-05
  • 打赏
  • 举报
回复
Test():i(0),str("") { }
unituniverse2 2014-03-05
  • 打赏
  • 举报
回复
引用 5 楼 wangsiyuanoo 的回复:
[quote=引用 4 楼 FrankHB1989 的回复:] [quote=引用 3 楼 wangsiyuanoo 的回复:] 谢谢 楼上两位 发现问题了 是在类里有个string对象 然后我对整个类进行了memset 删除这个就没有了 那请问: 如果一个类有string vector等这些stl对象 想对类整个初始化一下 而不是一个个的初始化 怎么做呢???
构造函数干什么吃的。[/quote] 我就是在构造函数中初始化的 比如 struct Test { string str; int i; Test() { memset( this, 0, sizeof(Test) ); //有什么办法可以替换掉memset 但也可以达到一次性初始化的目的 } }[/quote] 这哪里叫初始化,叫天。。。 str自己有构造函数了编译器会自动放置调用代码,i在Test()后面写: i()就可以了 构造函数的函数体里面的代码是用来做初始化列表中不方便做的事情的。真正的初始化部分在构造函数的冒号后面。 如果你看到有什么教材在构造函数的函数体里面才去做成员赋值的,那本教材可以扔了

65,192

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧