首页 > 其他 > 详细

boost 学习

时间:2014-08-11 20:48:02      阅读:398      评论:0      收藏:0      [点我收藏+]

智能指针的学习

中文教程网站 http://zh.highscore.de/cpp/boost/

不过代码可能 由于BOOST 版本不同需要稍作修改

 

scoped_ptr 离开作用域则自动调用类析构函数或者函数delete方法

shared_ptr 使用率最高的指针 类似scoped_ptr 但是所有权可以转移

 

#include <iostream>
#include <vector>
#include <windows.h>
#include <boost/smart_ptr.hpp>

using namespace std;

class CHandle
{
	HANDLE hProcess;
public:
	CHandle() { hProcess = OpenProcess(PROCESS_SET_INFORMATION, FALSE, GetCurrentProcessId()); }
	~CHandle() { cout << "Enter destructor handle" << endl; if(NULL != hProcess){CloseHandle(hProcess);hProcess = NULL;} }
	void PrintHandle() {cout << hProcess << endl;}
};


int _tmain(int argc, _TCHAR* argv[])
{
	{
		boost::scoped_ptr<CHandle> sp(new CHandle);
		sp->PrintHandle();
		sp.reset(new (CHandle));
		sp->PrintHandle();
	}
	cout << endl;
	
	typedef boost::shared_ptr<int> SHP;
	vector<SHP> v;
	v.push_back(SHP (new int(1)));
	v.push_back(SHP (new int(2)));
	v.push_back(SHP (new int(3)));

	for(vector<SHP>::iterator it = v.begin();
		it != v.end();++it)
	{
		cout << *(*it) << endl;
	}
	cout << endl;
	
	boost::shared_ptr<int> i1(new int(99)); 
	boost::shared_ptr<int> i2(i1);   
	cout << *i1 << endl;
	cout << *i2 << endl;

	i1.reset(new int(5));  
	cout << *i1 << endl;
	cout << *i2 << endl;

	

	return 0;
}

  

 再来一个示例

智能指针创建空间 保存输入的字符串

int _tmain(int argc, _TCHAR* argv[])
{
	char sz[] = "this is  test string";
	int strLen = strlen(sz) + 1;
	typedef boost::shared_ptr<char> SHPCHAR;
	SHPCHAR szp(new char[strLen]);
	strncpy(szp.get(),sz,strLen);

	cout << szp.get() <<endl;
	

	return 0;
}

  

boost 学习,布布扣,bubuko.com

boost 学习

原文:http://www.cnblogs.com/itdef/p/3905269.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!