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

网上常见人这样封装代码,这种代码缺点就是要手工处理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标准
}


你可能感兴趣的:(C++,C++,vector,vector,中文,指针,内存管理)