小和尚上山学习之智能指针(二)--boost::scoped_ptr

boost::scoped_ptr:
属于 boost 库,定义在 namespace boost 中,
包含头文件 #include<boost/smart_ptr.hpp> 便可以使用。boost::scoped_ptr 跟 std::auto_ptr 一样,可以方便的管理单个堆内存对象,特别的是,boost::scoped_ptr 独享所有权,避免了 std::auto_ptr 恼人的几个问题。

我们还是从代码开始分析:
class Simple {
  public:
  Simple(int param = 0) {
    number = param;
    std::cout << "Simple: " << number << std::endl; 
  }
  ~Simple() {
    std::cout << "~Simple: " << number << std::endl;
  } 
  void PrintSomething() {
    std::cout << "PrintSomething: " << info_extend.c_str() << std::endl;
  } 
public:
  std::string info_extend;
  int number;
};
//测试函数

void TestScopedPtr() {

  boost::scoped_ptr<Simple> my_memory(new Simple(1)); //创建一个scope_ptr

  if (my_memory.get()) { //获取原始类对象

    my_memory->PrintSomething();

    my_memory.get()->info_extend = "Addition";

    my_memory->PrintSomething();

    (*my_memory).info_extend += " other";

    my_memory->PrintSomething();

  

   // my_memory.release();           // 编译 error: scoped_ptr 没有 release 函数

    std::auto_ptr<Simple> my_memory2;

    //my_memory2 = my_memory;        // 编译 error: scoped_ptr 没有重载 operator=,不会导致所有权转移

  }

}

int _tmain(int argc, _TCHAR* argv[])
{

 TestAutoPtr();
 return 0;
}
//缺点:由于 boost::scoped_ptr 独享所有权,当我们真真需要复制智能指针时,需求便满足不了了,如此我们再引入一个智能指针,专门用于处理复制,参数传递的情况,这便是如下的 boost::shared_ptr
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值