封装函数时候,函数内分配内存简单管理方法。
2013-01-01 04:24
393 查看
网上常见人这样封装代码,这种代码缺点就是要手工处理new处理的内存空间。
处理的办法,有下面几种。
1.用智能指针代替。
2.用vector<char>代替。
//读取一个文件的内容到缓冲区,下面的代码仅是例子,不写错误处理。 int LoadToBuffer(const char* filename, byte* buffer) { ifstream ifs(filename); int filesize = static_cast<int>(boost::filesystem::file_size(filename)); buffer = new byte[filesize]; ifs.read(buffer,filesize); ifs.close(); return 0; }
处理的办法,有下面几种。
1.用智能指针代替。
2.用vector<char>代替。
#include <iostream> #include <string> #include <vector> #include <fstream> #include <boost/filesystem.hpp> #include <locale> using namespace std; int LoadToBuffer(const char* filename, vector<char>& cv) { ifstream ifs(filename); int filesize = static_cast<int>(boost::filesystem::file_size(filename)); cv.resize(filesize); ifs.read(&cv[0], filesize); ifs.close(); return 0; } int main() { std::wcout.imbue(locale("chs")); //wcout 显示中文 vector<char> cv; LoadToBuffer("main.cpp", cv); wcout << (wchar_t*)&cv[2] << endl;//因为是UNICODE格式的文件,去掉前面的FFFE标准 }
相关文章推荐
- SQL服务器内存有两种基本管理方法:动态分配和静态分配
- ANSI C动态内存分配与管理函数详解
- Android模拟内存紧张,应用被杀死如何模拟应用程序被杀掉? 更新:Daniel Lew指出,最简单的方法是在DDMS中点击”Stop Porcess”杀掉你的程序,在你调试程序的时候可以这样做。
- SQL服务器内存有两种基本管理方法:动态分配和静态分配
- MySQL不同内存分配方法的配置及简单对比
- OO中的继承分析,主要分析在编译和运行过程中子类父类的方法、字段和实例化时候在内存中分配和执行的先后,以及两个原则
- FFmpeg函数简单分析:内存的分配和释放(av_malloc()、av_free()等)
- Delphi 的内存操作函数(1): 给字符指针分配内存( 给字符指针(PChar、PWideChar、PAnsiChar)分配内存最佳的选择是StrAlloc。分配内存的时候会对字符串进行初始化)
- OO 中的继承分析:主要分析在编译和运行过程中 子类、父类 的字段和方法以及实例化时候在内存中分配 和 执行的先后,以及两个原则
- SQL服务器内存有两种基本管理方法:动态分配和静态分配
- 一些存储概念自己有用需要封装内存分配函数是了解
- SQL服务器内存有两种基本管理方法:动态分配和静态分配
- ROUND_UP函数详解(STL内存分配的时候 内存对齐上调大小的函数)
- C++的STL中vector内存分配方法的简单探索
- 宏定义函数指针类型&函数返回左值类值 1。宏定义不分配内存,变量定义分配内存。 2。宏名和参数的括号间不能有空格 3。宏替换只作替换,不做计算,不做表达式求解 //下面是正确的标准的写法 typedef int(FUNC1)(int in); ty
- 对AFNetworking简单封装GET,POST请求(block方法)
- 【malloc原理】 内存分配函数malloc的原理
- linux内核--段页式管理内存的方法
- 普通情况下的图片懒性加载 简单封装图片预加载函数
- 封装回调函数——为对象方法(Object Method,参数中带this指针的函数) 构造 普通函数(参数中无this指针的函数)形式 的入口