#include <boost/scoped_ptr.hpp>

多个元素使用#include <boost/scoped_array.hpp>

单个元素使用#include <boost/scoped_ptr.hpp>

作用域指针

它独占一个动态分配的对象,对应的类名为boost::scoped_ptr,定义在boost/scoped_ptr.hpp中。不像std::auto_ptr,作用域指针不能传递它所包含的对象的所有权到另一个作用域指针。一旦用一个地址来初始化,这个动态分配的对象将在析构阶段释放。因为一个作用域指针只是简单保存和独占一个内存地址,所以boost::scoped_ptr的实现就要比std::auto_ptr简单。在不需要所有权传递的时候应该优先使用boost::scoped_ptr。在这些情况下,比起std::auto_ptr它是一个更好的选择,因为可以避免不经意间的所有权传递。因此我们通常可以用它来实现动态对象的自动释放,比如在函数调用中产生的动态对象。

 

//error C2248: “boost::scoped_ptr<int>::operator =”: 无法访问 private 成员(在“boost::scoped_ptr<int>”类中声明)

 1 #include <iostream>
 2 #include <boost/scoped_ptr.hpp>
 3 
 4 void main()
 5 {
 6     boost::scoped_ptr<int>p(new int);
 7 
 8     *p = 12;
 9 
10     std::cout << *p.get() << std::endl;//12
11 
12     *p.get() = 3;
13 
14     std::cout << *p.get() << std::endl;//3
15 
16     boost::scoped_ptr<int>pA(nullptr);//独占内存
17 
18     pA = p;//error C2248: “boost::scoped_ptr<int>::operator =”: 无法访问 private 成员(在“boost::scoped_ptr<int>”类中声明)
19 }
原文地址:https://www.cnblogs.com/denggelin/p/5768493.html