智能指针的动态数组的使用

在C++编程里,最基本的操作就是内存分配和删除,也即是内存管理,这个特性是C++的主要优点也是缺点,为什么这样说呢?因为管理得好,是性能提升很高,其它语言是无法比拟的,管理不好就是坏处一大堆,比如内存泄漏,这样的问题常常会导致程序运行一段时就会死掉,因为内存不断地分配而没有删除,并且要找到那里分配的内存没有删除,也是费力的事情,经常是夜夜加班去解决,特别是那些不够细心的程序员,更加是恶梦不断。因此,不够细心,不够专业的程序员怎么办呢?当然是采用java、python这样的语言了。

像C++这样语言在整个开发过程,都需要高度紧张,极其恐惧,每写一行代码都如履薄冰,小心翼翼地输入代码。时时刻刻注意着内存的管理,考虑着分配内存了吗?内存及时删除了吗?内存是否越界了吗?虽然C++经历了几十年的发展,这些问题依然还是困惑着程序开发人员。目前C++已经发展到使用智能指针来管理内存了,这样对程序开发人员来说大为减轻,但还是比其它语言还是要小心很多,多花费很多精力。很多人也许怀疑这样做是否还值得呢?在某些经常使用的程序,在竞争比较剧烈的市场上,还是有其使用的必要性的。

在C++语言里,动态分配内存成为首先要解决的问题。大多数情下都是采用智能指针来管理,有一些开发人员为了避免指针的管理,往往采用栈式管理,这样会导致编译的开销,并且不能分配大量内存。在内存管理里,又有一个对象的内存管理和数组内存管理。一个对象的内存管理,直接使用智能指针就可以解决,这时只要注意不要循环引用即可。但是对于数组的内存管理,就需要更进一步了,因为数组内存分配和删除都比较特别,需要使用new []和delete []的方式来表示。直接使用智能指针是实现不了这个需求的,需要采用额外的删除定义才可以。比如下面的代码:

std::shared_ptr sp(new int[10], std::default_delete());

在这里创建一个int数组,分配了10个元素,因此在后面定义删除的格式std::default_delete,替代了原来默认的删除器,这样才可以删除数组分配的内存。

你可能感兴趣的:(RK3288嵌入式Linux,c++,指针)