您的位置:首页 > 运维架构

boost smart_ptr -> scoped_ptr

2017-02-25 12:36 399 查看

scoped_ptr P78

C++98 的标准“自动指针”:std::auto_ptr

#include <boost/smart_ptr.hpp>
using namespace boost;


只能在本作用域内使用,不希望被转让。

a. 不支持比较操作

b. .swap()交换两个scoped_ptr保存的原始指针,高效操作。

c. 缺陷:不能用作容器的元素

scoped_prt<string> sp(new string("text"));
cout<< *sp <<endl;
cout<< sp->size() <<endl;


#include <iostream>
#include <boost/assert.hpp>
#include <boost/smart_ptr.hpp>

using namespace std;
using namespace boost;

struct posix_file  //一个示范性质的文件类
{
posix_file(const char* file_name) //构造函数打开文件
{
cout << "Open file:" << file_name << endl;
}
~posix_file()
{
cout << "close file" << endl;
}

};

int main(int argc, char *argv[])
{
scoped_ptr<int> p(new int);
if(p)               //在bool语境中测试指针是否有效
{
*p = 100;
cout << *p << endl;
}
p.reset();          //reset()置空scoped_ptr,仅仅是演示
assert(p == 0);     //p不持有任何指针
if(!p)
{
cout << "scoped_ptr == null" << endl;
}

//文件类的scoped_ptr
//将在离开任用域时自动析构,从而关闭文件释放资源
scoped_ptr<posix_file> fp(new posix_file("/tmp/a.txt"));

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  boost