C++ Boost库:数组智能指针 scoped_array

本文介绍了C++ Boost库中的智能指针,如scoped_ptr、scoped_array、shared_ptr、shared_array、weak_ptr等,强调了它们在内存管理中的作用,以及如何使用它们来避免内存泄漏。通过示例代码展示了如何使用scoped_array进行动态数组管理,并解释了其与scoped_ptr的区别。此外,还提及了Boost库中其他重要的容器和工具,如unordered_set、unordered_map、property_tree、foreach等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++ Boost库:简介和第一个示例程序
C++ Boost库:数值转换 lexical_cast
C++ Boost库:字符串格式化 format
C++ Boost库:字符串string_algo
C++ Boost库:字符串算法string_algo
C++ Boost库:类型推导BOOST_AUTO/BOOST_TYPEOF
C++ Boost库:分词处理库 tokenizer
C++ Boost库:windows下编译Boost库
C++ Boost库:日期时间库 date_time
C++ Boost库:智能指针scoped_ptr
C++ Boost库:数组智能指针 scoped_array
C++ Boost库:共享所有权的智能指针 shared_ptr
C++ Boost库:工厂函数 make_shared
C++ Boost库:共享有权的数组智能指针shared_array
C++ Boost库:弱引用智能指针 weak_ptr
C++ Boost库:禁止拷贝 nocopyable
C++ Boost库:计时器 timer
C++ Boost库:普通数组array
C++ Boost库:散列容器 unordered_set、unordered_multiset
C++ Boost库:散列容器 unordered_map、unordered_multimap
C++ Boost库:双向映射容器 bimap
C++ Boost库:环形缓冲区 circular_buffer
C++ Boost库:动态多维数组 multi_array
C++ Boost库:使用property_tree解析XML和JSON
C++ Boost库:简化循环 BOOST_FOREACH
C++ Boost库:随机数库 Random
C++ Boost库:引用库 ref
C++ Boost库:绑定库 bind
C++ Boost库:线程库 thread 跨平台多线程
C++ Boost库:互斥量 mutex

1. 简介

  • 注意,scoped_ptr不能接受数组指针

scoped_ptr管理new出来的对象,scoped_arrayscoped_ptr很类似它包裝了new[]操作符(而不是new)在堆上分配的动态数组,弥补了标准库中没有指向数组的智能指针的遗憾,使用需要包含头文件:

#include<boost/scoped_array.hpp>
区别scoped_arrayscoped_ptr
接受的指针new[]new
内部指针不支持*->操作符重载普通指针,支持*->
析构函数实现使用delete[]使用delete
支持索引访问提供operator[]重载,可以像普通数组一样使用下标访问元素不支持operator[]重载
容器操作begin()end()begin()end()

2. 示例代码

#include<iostream>
using namespace std;   

#include<boost/scoped_array.hpp>
using namespace  boost;

class  A
{
public:
   A()  	
   {
   	cout << "构造A类对象!" << endl;
   }
   ~A( )  
   {
   	cout << "析构A类对象!" << endl;
   }
   int  m_a;
};

int main()
{ 
   //注意,scoped_ptr不能接受数组指针
   //scoped_ptr<A>  p1(new A[5]);//传入对象数组指针
    
   //C++中的new 与delete需要注意的
   /*
   A  *pA = new  A;
   delete  pA;

   A *pArr = new A[5]; 
   pArr[0].m_a = 100;//当成数组名一样使用 

   (pArr + 3)->m_a = 300;//直接加上整数,表示第4个对象的地址

   delete  []pArr; //删除数组指针
   */

   //指向数组内存地址的智能指针
   scoped_array<A>   p2(new  A[5]);

   for (int i = 0; i < 5; ++i)
   p2[i].m_a = i;  //支持[]访问,把p2当做数组名

   cout << p2[4].m_a << endl;//用索引访问

   //(p2 + 3)->m_a=300;//不支持

   getchar();
   return 0;
}

运行结果:

image-20210504142914824

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级D洋葱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值