我是靠谱客的博主 鳗鱼花生,这篇文章主要介绍小和尚上山学习之智能指针(四)--boost::scoped_array,现在分享给大家,希望可以做个参考。

boost::scoped_array 属于 boost 库,定义在 namespace boost 中,包含头文件 #include<boost/smart_ptr.hpp> 便可以使用。 boost::scoped_array 便是用于管理动态数组的。跟 boost::scoped_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 TestScopedArray() {
      boost::scoped_array<Simple> my_memory(new Simple[2]); // 使用内存数组来初始化
      if (my_memory.get()) {
        my_memory[0].PrintSomething();
        my_memory.get()[0].info_extend = "Addition";
        my_memory[0].PrintSomething();
        (*my_memory)[0].info_extend += " other";            // 编译 error,scoped_ptr 没有重载 operator*
        my_memory[0].release();                             // 同上,没有 release 函数
        boost::scoped_array<Simple> my_memory2;
        my_memory2 = my_memory;                             // 编译 error,同上,没有重载 operator=
      }
    }

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


 TestScopedArray();
 return 0;
}
小结:
boost::scoped_array 的使用跟 boost::scoped_ptr 差不多,不支持复制,并且初始化的时候需要使用动态数组。另外,boost::scoped_array 没有重载“operator*”,其实这并无大碍,一般情况下,我们使用 get() 函数更明确些。
 下面肯定应该讲 boost::shared_array 了,一个用引用计数解决复制、参数传递的智能指针类。

最后

以上就是鳗鱼花生最近收集整理的关于小和尚上山学习之智能指针(四)--boost::scoped_array的全部内容,更多相关小和尚上山学习之智能指针(四)--boost内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(108)

评论列表共有 0 条评论

立即
投稿
返回
顶部