【Boost】系列02:内存管理之scoped_ptr智能指针

智能指针,stl中有auto_ptr,boost的smart_ptr库有6种:

scoped_ptr,scoped_array,shared_ptr,shared_array,weak_ptr和intrusive_ptr.

scoped_ptr的拷贝构造函数和赋值操作符声明为私有,以禁止对智能指针的复制。

例1:

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

int main()
{
    scoped_ptr<string> sps(new string("Hello Boost"));
    cout<<sps->size()<<endl;    
    cout<<*sps<<endl;
    return 0;
}

输出

11

Hello Boost

例2:

#include <boost/smart_ptr.hpp>
#include <iostream>
#include <string>
using namespace std;
using namespace boost;
struct tag_file
{
    tag_file(const char *file_name)
    {
        cout<<"open file:"<<file_name<<endl;
    }
    ~tag_file()
    {
        cout<<"close file"<<endl;
    }

};
int main()
{
    scoped_ptr<int> spi(new int);
    if (spi)  //用bool语境测试
    {
        *spi = 100;
        cout<<*spi<<endl;
    }
    spi.reset();
    assert(spi == 0);
    if (!spi)
    {
        cout<<"scoped_ptr == null"<<endl;
    }
    scoped_ptr<tag_file> spf(new tag_file("a.txt"));
    
    return 0;
}

输出

100

scoped_ptr == null

open file:a.txt

close file

原文地址:https://www.cnblogs.com/elesos/p/2756291.html