您的位置:首页 > 其它

封装函数时候,函数内分配内存简单管理方法。

2013-01-01 04:24 393 查看
网上常见人这样封装代码,这种代码缺点就是要手工处理new处理的内存空间。
//读取一个文件的内容到缓冲区,下面的代码仅是例子,不写错误处理。
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标准
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐