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_array与scoped_ptr很类似它包裝了new[]操作符(而不是new)在堆上分配的动态数组,弥补了标准库中没有指向数组的智能指针的遗憾,使用需要包含头文件:
#include<boost/scoped_array.hpp>
| 区别 | scoped_array | scoped_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;
}
运行结果:

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

被折叠的 条评论
为什么被折叠?



