boost中的智能指针

(一)、vs2017配置boost库
(1)、boost官网是http://www.boost.org/,目前最新的版本是1.65.1,可以到这里下载。下载页面里有Unix和Windows的源码,以及Windows版本的第三方二进制包。下载最新版本的就行。
(2)、下载完成后解压到一个目录,例如我就放到了D:\DevTools\boost_1_67_0,目录结构如下图。
(3)、将上面的文件夹设置为名为BOOST_ROOT的环境变量。
(4)、打开VS 2017 Developer Command Prompt,切换到boost目录,执行bootstrap.bat脚本,如果执行成功的话,会生成b2.exe等几个工具,这样生成工具的工作就完成了。
(注释:)VS 2017 Developer Command Prompt的生成在vs2017的/工具/外部工具生成,网上有相应的文章,非常简单。
(5)、在VS中新建一个C++项目,然后打开项目属性页,然后切换到VC++目录,在包含目录和库目录中分别添加BOOST_ROOT和BOOST_ROOT\libs两个文件夹
这里写图片描述
这里写图片描述
这里写图片描述
配置完成后,就可以在项目中使用boost了。当然对于Visual Studio来说,还有更简单的办法,那就是使用NuGet。

注释,教程参考自:https://blog.csdn.net/u011054333/article/details/78648294

(二)、智能指针的使用

#include<iostream>
#include <string>
#include <boost/shared_ptr.hpp>

using namespace std;
class Book
{
public:
    Book(string name) :name_(name){
        cout << "creating book" << name << "..." << endl;
    }
    ~Book(){
        cout << "Destroying book" << name_ << "..." << endl;
    }
private:
    string name_;
};

int main()
{
    //创建Book对象,将其分配给myBook管理,此时其使用计数为1
    boost::shared_ptr<Book> myBook(new Book("[1984]"));
    //use_count()函数表示判断对象得引用次数
    cout << "project mybook: " << myBook.use_count() << ".\n" << endl;
    //将mybook的所有权分享给mybook1
    boost::shared_ptr<Book> myBook1(myBook);
    cout << "project mybook: " << myBook.use_count() << "." << endl;
    cout << "project mybook1:" << myBook1.use_count() << ".\n" << endl;


    cout << "Reset for 1th time. Begin..." << endl;
    //剥夺myBook的引用权
    myBook.reset();
    cout << "project mybook: " << myBook.use_count() << "." << endl;
    cout << "project mybook1: " << myBook1.use_count() << "." << endl;
    cout << "Reset 1th time. End ...\n" << endl;

    cout << "Reset 2th time. Begin ..." << endl;
    //剥夺myBook2的引用权
    myBook1.reset();
    //发现,在对象所有的引用权都被剥夺后,自动调用了析构函数
    cout << "Reset for 2th time. End ..." << endl;

    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/yuyushikuan/article/details/80010435