为什么要用boost::array

博客介绍了使用boost::array的原因,与std::vector相比,在仅需静态数组时可减少开销。它便于使用STL算法,有越界检查,能方便地整体操作数据。还给出了int和string类型的使用示例,展示了赋值、遍历、比较等操作。

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

为什么要用boost::array


1、boost::array 与 std::vector
( From Chapter 2. Boost.Array)
As replacement for ordinary arrays, the STL provides class std::vector. However, std::vector<>

provides the semantics of dynamic arrays. Thus, it manages data to be able to change the number

of elements. This results in some overhead in case only arrays with static size are needed.

2、便于使用stl中的算法

3、越界检查
   尽管抛出assert错误,但总比没有强

4、整体操作数据很方便
  boost::array::assign(...)


-----------------------------------------------------------
eg:


#include <iostream>
#include <algorithm>
#include <string>
#include <boost/array.hpp>

template<typename T>
void PrintValue(T value)
{
 std::cout<<value<<std::endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
 //---------------------------------
 //int
 
 boost::array<int, 10> arrInt = {0,1,2}; //未赋值的初试化为0
 std::for_each(arrInt.begin(),arrInt.end(),PrintValue<int>);
 
 //所有的值都赋为20
 arrInt.assign(20);
 std::for_each(arrInt.begin(),arrInt.end(),PrintValue<int>);

 //--------------------------------------
 //string
 boost::array<std::string, 5> arrStr; //默认为""
 arrStr.assign("NULL");
 std::for_each(arrStr.begin(),arrStr.end(),PrintValue<std::string>);

 //越界检查
 //std::string strErr = arrStr[5]; //发出assert

 //比较
 boost::array<std::string, 5> arrStr2;
 arrStr2.assign("MULL");
 if(arrStr > arrStr2)
  std::cout << "arrStr > arrStr2" <<std::endl;
 
 if(arrStr != arrStr2)
  std::cout << "arrStr != arrStr2" <<std::endl;

 //boost::array<std::string, 6> arrStr3;
 //arrStr3.assign("NULL");
 //if(arrStr != arrStr3)   //无法比较,类型不同5 != 6
 // std::cout << "arrStr != arrStr3" <<std::endl;

 return 0;
}

<think>好的,我现在需要回答用户的问题:“boost::shared_array生成的叫什么”。首先,我应该回忆一下Boost库中的智能指针相关知识。 用户提到了boost::shared_array,这应该是一个智能指针类。根据我的记忆,Boost库提供了几种智能指针,比如shared_ptr、scoped_ptr和shared_array等。shared_ptr用于管理动态分配的对象,而shared_array可能类似,但专门用于数组。 接下来,我需要确认shared_array的具体用途和名称。shared_array应该是一个用于管理动态分配的数组的智能指针。它提供自动的内存管理,通过引用计数来确保数组在不再被使用时被正确释放。这样用户就不需要手动调用delete[],避免内存泄漏。 然后,我需要明确用户的问题:“生成的叫什么”。这里的“叫什么”可能指的是这个智能指针对象的名称,或者是它的类型名称。根据Boost文档,shared_array本身就是一个类模板,用户使用时需要实例化它,例如boost::shared_array<int>,这会生成一个管理int数组的智能指针对象。 可能用户对shared_array的实例化后的对象名称有疑问,但通常这个名称由用户自己定义,比如boost::shared_array<int> arr(new int[10]); 这里arr就是用户定义的变量名。不过,用户可能想了解的是这个智能指针的类型名称,也就是boost::shared_array<T>。 另外,我需要确保回答中提到的信息准确。比如,shared_array确实是用于数组,使用delete[]来释放内存,而shared_ptr则使用delete,所以不能混用。同时,shared_array在C++11之后可能被std::shared_ptr替代,但std::shared_ptr需要自定义删除器来处理数组,而Boost的shared_array自动处理这一点。 可能还需要比较一下shared_array和shared_ptr的区别,强调shared_array针对数组的特性,比如重载的operator[],以及正确的内存释放方式。 最后,我需要用中文组织回答,结构清晰,分点说明,确保用户能够理解shared_array的作用、用法以及注意事项,同时指出其在现代C++中的替代方案。</think>boost::shared_array 生成的智能指针对象类型名称是 `boost::shared_array<T>`(其中 `T` 是数组元素的类型)。以下是详细说明: --- ### 1. **基本定义** - **作用**:`boost::shared_array` 是 Boost 库提供的一种智能指针,专门用于管理动态分配的 **数组**(通过 `new[]` 分配)。 - **核心特性**:通过引用计数实现自动内存管理,当最后一个 `shared_array` 对象销毁时,自动调用 `delete[]` 释放数组。 --- ### 2. **关键行为** - **构造与初始化** 需显式绑定动态数组: ```cpp boost::shared_array<int> arr(new int[10]); // 管理一个长度为10的int数组 ``` - **访问元素** 重载了 `operator[]`,可直接访问数组元素: ```cpp arr[0] = 42; // 操作与原生数组一致 ``` - **所有权共享** 支持拷贝和赋值,引用计数自动增减: ```cpp boost::shared_array<int> arr2 = arr; // 引用计数+1 ``` --- ### 3. **与 `boost::shared_ptr` 的区别** | 特性 | `boost::shared_array` | `boost::shared_ptr` | |---------------------|-------------------------------|--------------------------------| | **管理对象** | 动态分配的数组 (`new[]`) | 动态分配的单对象 (`new`) | | **释放方式** | 自动调用 `delete[]` | 自动调用 `delete` | | **访问元素** | 支持 `operator[]` | 通过 `operator*` 或 `operator->` | | **C++11 替代方案** | 无直接等价,需结合 `std::shared_ptr` 与自定义删除器 | `std::shared_ptr` | --- ### 4. **现代 C++ 的替代方案** 在 C++11 及更高版本中,建议优先使用标准库的 `std::shared_ptr`,但需注意: - 对数组需指定自定义删除器: ```cpp std::shared_ptr<int[]> arr(new int[10], [](int* p) { delete[] p; }); // C++17 起支持 `std::shared_ptr<T[]>` ``` - 或使用 `std::vector` 或 `std::array` 替代原始数组。 --- ### 5. **典型应用场景** - 需要共享动态数组所有权时(如跨多线程、多对象共享数据)。 - 需避免手动调用 `delete[]` 的场合。 --- **总结**:`boost::shared_array` 生成的智能指针类型为 `boost::shared_array<T>`,专为动态数组设计,提供自动化的内存管理。尽管在现代 C++ 中可用 `std::shared_ptr` 替代,但其针对数组的特性(如 `operator[]`)仍有一定实用价值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值