重载全局new/delete具体实现内存检测
来源:互联网 发布:哈尔滨铁路局 知乎 编辑:程序博客网 时间:2024/06/17 15:13
按照上面转载的文章的思路,只是小小的实现了一下。还有很多不足,等到有想法的时候再修改。
#include <iostream>#include <stdlib.h>using namespace std;template <typename T>class smartPtr{public:smartPtr(T *ptr):_ptr(ptr),useCountPtr(new int(1)){ }smartPtr(const smartPtr<T> & org):_ptr(org.getPtr()),useCountPtr(org.getUseCountPtr()){ ++(*useCountPtr);}smartPtr<T> & operator=(const smartPtr& org){/* code */_ptr=org.getPtr();useCountPtr=org.getUseCountPtr();++(*useCountPtr); return *this;}smartPtr<T>* operator=(const smartPtr<T> *org){/* code */_ptr=org->getPtr();useCountPtr=org->getUseCountPtr();++(*useCountPtr); return this;}void setValue(T date){ *_ptr=date;}T getValue() const{ return *_ptr;}T *getPtr() const{ return _ptr;}int *getUseCountPtr() const {return useCountPtr;}~smartPtr(){cout<<"distructor usecount is "<<(*useCountPtr)-1<<endl;if (--(*useCountPtr)==0){/* code */delete _ptr;_ptr=NULL;cout<<"ptr delete safely!!!";}}private:T* _ptr;int *useCountPtr;/* data */};int main(){ int* num=new int(10); smartPtr<int> *pp=new smartPtr<int>(num); smartPtr<int> *pp1=new smartPtr<int>(*pp); smartPtr<int> ss=*pp; smartPtr<int> *pp2=pp; cout<<pp->getValue()<<endl; delete pp; delete pp1; delete pp2;}
输出结果:
this cpp has memory leak!!!!
D:\code\go1\mesh.cpp line :96 new ptr not delete!!!
will delete later...
D:\code\go1\mesh.cpp line :96 deleted.
D:\code\go1\mesh.cpp line :98 new ptr not delete!!!
will delete later...
D:\code\go1\mesh.cpp line :98 deleted.
0 0
- 重载全局new/delete具体实现内存检测
- 重载全局new/delete实现内存检测
- 重载全局new/delete实现内存检测
- 重载全局new/delete实现内存计数
- C++:重载全局new/delete实现跨平台多线程内存检测
- 重载全局new,delete
- 重载new和delete检测内存泄漏
- 重载New和Delete检测内存泄漏
- 是否重载全局 new / delete
- 如何检测内存泄漏——重载new和delete
- 如何检测内存泄漏——重载new和delete
- 如何检测内存泄漏——重载new和delete
- 如何检测内存泄漏——重载new和delete
- 如何检测内存泄漏——重载new和delete
- 如何检测内存泄漏——重载new和delete
- C++ new delete new[] delete[]重载实现
- 内存泄露:重载new delete
- c++ 中的重载全局new,delete
- LoaderManager使用详解(三)---实现Loaders
- 机器学习十大算法
- git status 显示中文
- Socket编程实现简易聊天室
- 【好程序员笔记分享】—— C语言中的static关键字
- 重载全局new/delete具体实现内存检测
- java-web 小tips
- Servlet 初步(一)
- 智能手机首次充电秘诀
- POJ 1860 Currency Exchange (寻找是否存在正权回路)
- 2015-第15周项目2-用二进制文件处理学生成绩
- 2015062105 - 如何快速学会知识
- 重装电脑系统Win7并激活、删除其中一个系统、修复电脑 发出尖锐的 嘀嘀嘀嘀嘀 警报生声
- java&eclipse代码提示