博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
boost库在工作(7)使用数组智能指针scoped_array
阅读量:4162 次
发布时间:2019-05-26

本文共 997 字,大约阅读时间需要 3 分钟。

学习过C++的开发人员,都知道在C++里数组指针与一般的指针是有区别的。比如使用数组形式分配的内存,就需要使用数组的形式删除。但初学开发的开发人员,往往会忘记这点,如下面所示:

char*  pBuf = new char[256];

......这里使用

delete pBuf; 

在最后这行代码上,就使用出错了。应该使用数组的形式删除,否则只删除了一个元素占用的内存,其它所有占用的内存就变成内存泄漏了。为了避免这种情况,有什么好方法吗?在STL库里没有提供比较好的智能指针,现在boost库提供了这种智能指针了,它就是scoped_array。希望所有分配数组的内存,都使用这种方式来分配,不但可以避免删除时出错,也可以防止内存泄漏,提供更加安全的机制。具体的使用方式如下:

// boost_003.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include 
#include
#include
//使用scoped_arrayvoid Test(void){ //创建 typedef unsigned char BYTE; const int nBufSize = 1024; boost::scoped_array< BYTE > pBuf(new BYTE[nBufSize]); pBuf[nBufSize - 1] = 0x4A; memcpy(pBuf.get(), "1abc", 4); std::cout << std::hex << (unsigned)pBuf[2] << std::endl; //赋值出错。 //boost::scoped_array< BYTE > pTemp = pBuf; boost::scoped_array< BYTE > pTemp; //进行两智能指针比较出错。 //if (pTemp == pBuf) //{ //} //重新设置为新分配的内存。 pTemp.reset(new BYTE[64]);}int _tmain(int argc, _TCHAR* argv[]){ Test(); system("PAUSE"); return 0;}

转载地址:http://jaixi.baihongyu.com/

你可能感兴趣的文章
素数算法
查看>>
java多线程环境单例模式实现详解
查看>>
将一个数插入到有序的数列中,插入后的数列仍然有序
查看>>
在有序的数列中查找某数,若该数在此数列中,则输出它所在的位置,否则输出no found
查看>>
阿里p8程序员四年提交6000次代码的确有功,但一次错误让人唏嘘!
查看>>
一道技术问题引起的遐想,最后得出结论技术的本质是多么的朴实!
查看>>
985硕士:非科班自学编程感觉还不如培训班出来的,硕士白读了?
查看>>
码农:和产品对一天需求,产品经理的需求是对完了,可我代码呢?
查看>>
第六章 背包问题——01背包
查看>>
1136 . 欧拉函数
查看>>
面试题:强制类型转换
查看>>
Decorator模式
查看>>
Template模式
查看>>
Observer模式
查看>>
高性能服务器设计
查看>>
图文介绍openLDAP在windows上的安装配置
查看>>
Pentaho BI开源报表系统
查看>>
Pentaho 开发: 在eclipse中构建Pentaho BI Server工程
查看>>
JSP的内置对象及方法
查看>>
android中SharedPreferences的简单例子
查看>>