多个元素使用#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 }
时间: 2024-10-16 06:57:22