本篇内容主要讲解“C++标准库难点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++标准库难点有哪些”吧!
成都创新互联专注于企业全网营销推广、网站重做改版、临清网站定制设计、自适应品牌网站建设、HTML5建站、商城系统网站开发、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为临清等各大城市提供网站开发制作服务。
在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++标准库难点有哪些”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!