温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++标准库难点有哪些

发布时间:2021-11-29 16:46:13 来源:亿速云 阅读:110 作者:iii 栏目:编程语言

本篇内容主要讲解“C++标准库难点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++标准库难点有哪些”吧!

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

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

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

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

#include  #include  class Blanks  {  public:  Blanks(){}  void *operator new( size_t stAllocateBlock, char chInit );  };  void *Blanks::operator new( size_t stAllocateBlock, char chInit )  {  void *pvTemp = malloc( stAllocateBlock );  if( pvTemp != 0 )  memset( pvTemp, chInit, stAllocateBlock );  return pvTemp;  }  int main()  {  Blanks *a5 = new( 0xa5 ) Blanks;//创建对象Blanks,并且初试化为0xa5  return a5 != 0;  }

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

 void f( )  {  X* p1 = new X[10];  //...  delete [] X;  }

为什么不使用delete [10] X;来释放内存?Bjarne Stroustrup称这种做法容易导致错误,而将记录元素个数的任务放在delete的实现中了。

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

所以,只能使用其来指向一个单个对象。模板部分是C++中比较难的部分,也是C++的魅力所在。

到此,相信大家对“C++标准库难点有哪些”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI