placement new 的问题
来源:互联网 发布:自动画线源码 编辑:程序博客网 时间:2024/04/29 02:03
内存池会用到这种技巧,但是还是有内存泄露的风险:
#include <iostream>#include <map>#include <malloc.h>#include <vector>using namespace std;class User{public:~User(){}int m1;map<int, int> m2;vector<int> m3;};int a = 1;void printInfo(){printf("%d\n", a++);malloc_stats();printf("\n");}int main(){//printInfo();char* pMem = new char[100];printInfo();User* pUser = new (pMem)(User);printInfo();for (int i = 0; i < 1000; ++i){pUser->m2[i] = i;pUser->m3.push_back(i);}pUser->m2.clear();pUser->m3.clear();//pUser->~User();printInfo();delete[] pMem;printInfo();return 0;}
这里还是有问题,来看真相:
因为vector的内存还是在STL的内存池里没有释放,造成了暂时的内存泄露,因此要显式调用它的析构:
然后结果是:
可以看到这次没有内存泄露了。
所以内存泄露神马时候都要小心翼翼。
0 0
- placement new 的问题
- placement new 编译问题
- placement new的执行
- placement new的使用
- placement new 的使用
- placement new的用法
- placement new的作用
- placement new的用法
- placement new的用法
- C++的placement new
- placement new的用法
- placement new的使用
- placement new的用法
- placement new的用法
- (转) Placement New的使用
- (转) Placement New的使用
- C++ placement new 的使用方法
- C++ placement new 的使用方法
- POJ做题笔记之一 水题(1)
- 人类为什么喜欢游戏--因为现实是破碎的
- ArcGIS 10.0破解了,不能使用3D analyst和spatial analyst这两个工具,提示没有许可证
- QT加载muPDF静态库的问题和解决(导入C语言静态库,QT的运行时库设定)
- ARM+Linux开发板不能挂载U盘问题
- placement new 的问题
- Oracle存储过程和包管理
- sql
- Cxf - 基础和示例
- HDU1874
- 栈(数组形式)实现_c++
- Oracle声明变量
- Lesson_for_java_day09--练习--继承、this、super的使用、使用构造方法赋初始值
- 黑马程序员_学习笔记第1天—java环境搭建和dos基本命令