瓦解C++标准库几大难点

开发 后端
下文对C++标准库进行了明确的学习与研究,先从C++标准库的定义开始,其次讲解影响C++标准库的两个决定性因素。。

在C++标准库中,有关缺省变量值的限制非常模糊。基于此,很多编译器允许开发人员将缺省变量值包含在函数声明,指向函数的指针和引用,成员函数的指针,以及typedef声明中。

例外一种需要更好的内存控制的情况是:需要在有限资源的情况下长时间不间断运行的程序。实时系统经常需要用最少的耗费来获取有保证的可预期的内存。这也就导致了更好的内存控制的需要。#t#

一般来说,这些程序都避免使用动态的内存分配,而使用特殊目的的内存分配器来管理有限资源。此外,还有一些情况下由于硬件或系统的要求,需要将对象放在指定的内存位置。这也需要进行定制的内存管理(通过重载new来加以实现)。

当分配内建(built-in)类型的对象、未包含用户自定义的new操作符函数的类对象、任何类型的数组时,使用全局new操作符函数。当在类中自定义C++标准库,分配该类对象的内存时,调用该类的new操作符。如下:

  1. #include  
  2. #include  
  3. class Blanks  
  4. {  
  5. public:  
  6. Blanks(){}  
  7. void *operator new( size_t stAllocateBlock, char chInit );  
  8. };  
  9. void *Blanks::operator new( size_t stAllocateBlock, char chInit )  
  10. {  
  11. void *pvTemp = malloc( stAllocateBlock );  
  12. if( pvTemp != 0 )  
  13. memset( pvTemp, chInit, stAllocateBlock );  
  14. return pvTemp;  
  15. }  
  16. int main()  
  17. {  
  18. Blanks *a5 = new( 0xa5 ) Blanks;//创建对象Blanks,并且初试化为0xa5  
  19. return a5 != 0;  

new操作符可以重载,而delete却不行。因为等到需要释放的时候,我们所能得到的就是一个指针。而且该指针可能不是原先的对象类型指针(有可能进行了类型转换)。实际上,当使用new获得一个指向一片内存的指针时,在该片内存前有一个指示器(indicator),记录实际分配的内存数量。当调用delete时,可以获知需要释放的内存大小。数组的释放(Deallocating Arrays): 

  1.  void f( )  
  2. {  
  3. X* p1 = new X[10];  
  4. //...  
  5. delete [] X;  

为什么不使用delete [10] X;来释放内存?Bjarne Stroustrup称这种做法容易导致错误,而将记录元素个数的任务放在delete的实现中了。至于为什么C++中未内建垃圾收集器(Garbage Collection)的原因,看《C++语言的设计和演化》(En) Bjarne Stroustrup 机械工业出版社(俗称:D&E)可以得到答案。

此外,C++标准库中提供了一种智能型指针auto_ptr,这种指针可以帮助我们防止“被异常抛出时发生资源泄漏”。但是缺点是该智能型指针不能指向数组,因为其内部释放内存是通过delete而非delete [] 来进行的。

所以,只能使用其来指向一个单个对象。模板部分是C++中比较难的部分,也是C++的魅力所在。以下文字是我以前看过的,具体出处不清楚了。今天稍微整理了一下,作为模板介绍的一个单元。

【编辑推荐】

  1. 如何正确编写C++项目开发编写项目计划书
  2. 对C++库函数进行学习探索总结笔记
  3. 深度演示C++语言的种种高安全性
  4. 详细介绍如何准确无误的编写C++语言
  5. 深度演示C++语言的种种高安全性
责任编辑:chenqingxiang 来源: 品牌家电网
相关推荐

2021-08-16 12:35:25

C语言内存编程

2010-01-27 15:36:54

C++异常处理

2010-01-14 15:46:27

C++标准库

2010-01-26 13:55:07

C++标准模板库

2019-09-18 09:05:26

微软开源Windows

2010-01-26 17:27:58

C++C程序

2011-05-13 18:10:55

CC++

2010-01-19 09:39:43

C++标准程序库

2010-01-19 09:39:43

C++标准程序库

2010-02-03 16:04:34

C++标准类库

2010-01-14 09:43:26

C++标准程序库

2022-09-22 10:22:36

C++编程语言代码

2010-01-25 18:05:40

C++语言

2010-01-13 10:09:24

C++标准库

2010-01-22 13:31:58

C++标准库

2010-01-15 14:59:54

C++标准程序库

2010-01-19 18:04:02

C++标准程序库

2013-08-07 14:25:23

商户APP

2022-08-30 07:37:50

分布式数据库互联网

2010-01-11 10:01:25

C++的编程工具
点赞
收藏

51CTO技术栈公众号