一个简单的类,来管理mysql的结果集的指针。
2010-12-02 16:16
453 查看
有点类似于智能指针了。
当然,这是一个模板类,你可以用于任何你想要管理的指针。
//用来删除mysql结果集的函数对象
struct Mysql_Result_Deleter
{
void operator()(MYSQL_RES* result)
{
if (result != NULL)
mysql_free_result(result);
}
};
//默认删除资源的策略,用delete
template<class _Ty>
struct my_default_delete
{ // default deleter for unique_ptr
typedef my_default_delete<_Ty> _Myt;
my_default_delete()
{ // default construct
}
template<class _Ty2>
my_default_delete(const my_default_delete<_Ty2>&)
{ // construct from another default_delete
}
void operator()(_Ty *_Ptr) const
{ // delete a pointer
if (0 < sizeof (_Ty)) // won't compile for incomplete type
delete _Ptr;
}
};
// this class is as simple as possbile to hold the stack pointers
// to make sure that the pointer will be deleted if there is any exception
//
//模板函数
template<typename T1, typename T2 = my_default_delete<T1>>
class scope_ptr_holder
{
T1* original_pointer;
T2 itsdeleter;
public:
explicit scope_ptr_holder(T1* t) // constructor
:original_pointer(t){}
explicit scope_ptr_holder(T1* t , T2 deleter) // constructor
:original_pointer(t),
itsdeleter(deleter){}
void Reset(T1* newptr)
{
if(newptr == original_pointer)
return;
if (original_pointer != NULL)
itsdeleter(original_pointer);
original_pointer = newptr;
}
~scope_ptr_holder()
{
if (original_pointer != NULL)
{
itsdeleter(original_pointer);
original_pointer = NULL;
}
}
protected:
scope_ptr_holder(const scope_ptr_holder&);
const scope_ptr_holder& operator=(const scope_ptr_holder&);
};
}
实例代码:
sqlstream << "select * from pagecontainequipment where pageid = " << page->GetID() << endl;
string sql = sqlstream.str();
MYSQL_RES* result = QueryAndReturnResult(sql.c_str());
if (result == NULL)
return false;
scope_ptr_holder<MYSQL_RES, Mysql_Result_Deleter> resultholder(result);
该代码已用在实际的项目中了,是没有什么问题的。
当然,这是一个模板类,你可以用于任何你想要管理的指针。
//用来删除mysql结果集的函数对象
struct Mysql_Result_Deleter
{
void operator()(MYSQL_RES* result)
{
if (result != NULL)
mysql_free_result(result);
}
};
//默认删除资源的策略,用delete
template<class _Ty>
struct my_default_delete
{ // default deleter for unique_ptr
typedef my_default_delete<_Ty> _Myt;
my_default_delete()
{ // default construct
}
template<class _Ty2>
my_default_delete(const my_default_delete<_Ty2>&)
{ // construct from another default_delete
}
void operator()(_Ty *_Ptr) const
{ // delete a pointer
if (0 < sizeof (_Ty)) // won't compile for incomplete type
delete _Ptr;
}
};
// this class is as simple as possbile to hold the stack pointers
// to make sure that the pointer will be deleted if there is any exception
//
//模板函数
template<typename T1, typename T2 = my_default_delete<T1>>
class scope_ptr_holder
{
T1* original_pointer;
T2 itsdeleter;
public:
explicit scope_ptr_holder(T1* t) // constructor
:original_pointer(t){}
explicit scope_ptr_holder(T1* t , T2 deleter) // constructor
:original_pointer(t),
itsdeleter(deleter){}
void Reset(T1* newptr)
{
if(newptr == original_pointer)
return;
if (original_pointer != NULL)
itsdeleter(original_pointer);
original_pointer = newptr;
}
~scope_ptr_holder()
{
if (original_pointer != NULL)
{
itsdeleter(original_pointer);
original_pointer = NULL;
}
}
protected:
scope_ptr_holder(const scope_ptr_holder&);
const scope_ptr_holder& operator=(const scope_ptr_holder&);
};
}
实例代码:
sqlstream << "select * from pagecontainequipment where pageid = " << page->GetID() << endl;
string sql = sqlstream.str();
MYSQL_RES* result = QueryAndReturnResult(sql.c_str());
if (result == NULL)
return false;
scope_ptr_holder<MYSQL_RES, Mysql_Result_Deleter> resultholder(result);
该代码已用在实际的项目中了,是没有什么问题的。
相关文章推荐
- 一个极其简单的CMS(内容管理系统)PHP+MySQL技术解析
- 一个简单的jsp网页与MySQL链接的简单账户管理网页
- 基于express,MySQL,ejs实现的一个简单基本的网站后台管理应用
- MySQL 创建一个简单的成绩管理系统
- 一个简单的hibernate+mysql的实例java/jsp开发
- 一个简单的项目版本管理脚本
- 一个简单备份管理系统的实现
- 用netbeans完成 简单数据库管理系统 的几个错误和解决,发现一个mysql的中文
- 6/27 一个简单的员工管理程序:添加微软成员资格数据表
- 一个简单的CD唱片管理程序
- 一个简单的MySQL数据迁移示例
- 一个简单的mysql备份脚本
- mysql 如何创建一个简单的存储过程
- eclipse RCP开发一个简单的MYSQL客户端工具介绍
- mysql搭建一个简单的数据库
- Django 一个简单的图书管理程序(二编写借阅人管理)
- 一个简单的Mysql的联合查询列子
- Spring+Mybatis+MySql+Maven 简单的事务管理案例
- 一个简单的档案管理应用(DOS平台)
- 我的Android进阶之旅------>Android关于Activity管理的一个简单封装