c – 使用指针时DO和Donts

栏目: C · 发布时间: 5年前

内容简介:char *比字符数组更受欢迎?翻译自:https://stackoverflow.com/questions/1721862/dos-and-donts-while-using-pointers

char *比字符数组更受欢迎?

C具体

>避免手动管理内存,而是使用RAII容器,如std :: auto_ptr,boost :: scoped_ptr,boost :: shared_ptr和等效的数组容器.更简单,通常std :: vector工作正常,它根本不需要任何指针使用.最后,您可以传递引用,而不是将指针传递给大型或可修改的数据结构.指针可以表示数组,而引用可以避免这种歧义.

>索引数组是大多数指针算法的理想替代品.它通常不比指针算术慢,这通常更容易出错并且更难以阅读和维护.通常,不要以可读性为代价进行微优化.

>调用正确的释放例程:delete []用于仅通过new … []分配的数组,仅用于指向单个对象的指针,而且仅用于通过C api分配的内存的free(…)(例如malloc) (..)).这些不能混淆; C释放例程包括析构函数调用,因此需要正确调用.

>显式初始化并设置无意义的NULL指针.调试意外的空取消引用比不正确的内存访问更容易.释放NULL指针是可以的,因此您不需要使用检查来破坏析构函数以避免这种情况.如果过早删除对象,则应将其指针设置为NULL,以避免双重删除同一指针并避免意外取消引用悬空指针.

>如果您正在使用C继承并覆盖析构函数,请阅读虚拟析构函数;这些是正确性所必需的(简而言之,基类必须明确地将析构函数标记为虚拟).

>如果必须手动管理内存,请注意谁“拥有”指针.只有所有者才能释放指针指向的对象或数组,并且在所有者删除指向它的指针后,其他任何对象都不能使用该对象. boost :: shared_ptr是一个无障碍的低开销容器,当你需要共享指针时通常很好.

翻译自:https://stackoverflow.com/questions/1721862/dos-and-donts-while-using-pointers


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

逆向工程权威指南

逆向工程权威指南

Dennis Yurichev(丹尼斯) / 安天安全研究与应急处理中心 / 人民邮电出版社 / 2017-3-1 / 168

逆向工程是一种分析目标系统的过程,旨在于识别系统的各组件以及组件间关系,以便于通过其它形式、或在较高的抽象层次上,重建系统的表征。 本书专注于软件的逆向工程,是写给初学者的一本经典指南。全书共分为12个部分,共102章,涉及X86/X64、ARM/ARM-64、MIPS、Java/JVM等重要话题,详细解析了Oracle RDBMS、Itanium、软件狗、LD_PRELOAD、栈溢出、EL......一起来看看 《逆向工程权威指南》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码