依赖反转,异常,auto_ptr,多态,STL容器,虚构造函数

原创 2007年09月21日 00:51:00

(1) 栈上变量必须初始化

(2) 从堆上分配的内存必须初始化

(3) 栈上局部变量是否有大数组变量,导致栈超出默认限制溢出 

(4) 栈中是否有不合理的递归,导致栈超出默认限制溢出 

(5) 必须对内存耗尽的情况进行处理

(6) 释放某个指针后,必须将该指针变量赋值为NULL, 避免野指针的出现

(7) 禁止对同一指针delete或者free两次或以上

(8) 对数组操作,必须强制确保下标不会越界

(9) 避免频繁的不等长小内存申请和释放

(10) 内存申请和释放必须配对,防止内存泄漏

(11) 析构数组类型必须使用[] delete形式

(12)  free和malloc, delete和new 必须配对使用,不能混用

(13) 线程的使用也是占用了内存,是否考虑到了线程释放

(14) 对于覆盖标准的operator new和operator delete函数, 必须配对重写

(15) 对于内存长度,不能靠自己计算,必须使用sizeof和注意字节对齐

(16) 对于C字符串,是否考虑到字串末位的'/0'结束符, 比如: char *p = "WoKao"; char buffer[5]; strpcy(buffer, p);

(17) 使用strcpy(char *dest, const char *src)等str系列函数,是否考虑到了dest缓冲溢出的情况, 应该优先确保dest不会溢出或者使用n族函数

(18) 使用int sprintf(char *string, char *farmat [,argument,...]);函数的时候是否考虑到了溢出,应该优先确保string不会溢出或者使用snprintf函数

(19) 使用fgets函数替代gets

(20) mem族函数注意确保操作空间不会溢出

(21) 进行内存拷贝,赋值或者初始化的时候,尽量用mem函数族替代循环操作

(22) 小心指针和数组的区别, 比如const char *p = "12345678", char buffer[] = "12345678"; cout<<sizeof(p)<<endl, cout<<sizeof(buffer)<<endl;等等

(23) 是否试图修改常量字符串,比如const char* p = "WoKao", p[0] ='R';

(24) 是否考虑数组名作为函数参数传递时,数组退化为指针。

(25) 注意避免大量临时对象的产生导致内存的急速消耗, 比如连续的很长的 string + 操作

(26) 注意避免对临时对象进行引用,比如 string a = "123"; string b = "456"; const char* p = (a + b).c_str();

(27) 在函数参数传递时,尽量使用指针或者引用,避免直接传值操作,特别是大对象类型

(28) 对于auto_ptr智能指针的使用,是否考虑到了所有权的转移,导致的内存释放

(29) 对于vector类,是否考虑到了其内部内存不足时,其自动扩展2倍内存机制,对程序运行是否有影响

(30) 在使用STL string类的时候,是否考虑了string类实现的多样性对程序的影响。

(31) 在某个模块,对象需要结束其生命周期的时候,是否释放了其对应的内存资源。比如C++的析构函数中是否delete了其对应的内存资源

(32) 小心共享内存上存放有vtable的对象,另外一个进程进行删除时,导致非法访问

(33) 不能够对含有vtable的对象进行memset初始化

(34) 计算结构变量偏移必须使用offsetof

 

 

 

 

为什么不要在STL容器中存储 auto_ptr 对象

Posted on 2009-04-27 20:37 月光林地 大多数C++ 程序员都知道不要把auto_ptr 对象作为STL容器元素来使用。但是很少有人知道到底是为什么。C++标准如是说:“STL...
  • suwei19870312
  • suwei19870312
  • 2011年07月17日 11:50
  • 1106

让项目拥有变化的能力——依赖倒置原则

什么是依赖倒置原则如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对象设计的主要实现机制之一,它是系统抽象化的具体实现。依赖倒转原则是Robert C. Martin在1996年为“C...
  • Todo_
  • Todo_
  • 2016年01月24日 17:14
  • 743

auto_ptr到底能不能作为容器的元素?

【摘要】对C++语言本身来说,它并不在乎用户把什么类型的对象作为STL容器的元素,因为模板类型参数在理论上可以为任何类型。比如说STL容器仅支持“值”语义而不支持“引用(&)”语义,并非因为模板类型参...
  • ysu108
  • ysu108
  • 2014年09月10日 09:38
  • 691

STL中的智能指针(Smart Pointer)及其源码剖析: std::auto_ptr

STL中的智能指针(Smart Pointer)及其源码剖析: std::auto_ptr 本文主要介绍了 auto_ptr的使用及其源码。 auto_ptr是STL中的智能指针家族的成员之一, ...
  • yanglingwell
  • yanglingwell
  • 2017年02月20日 12:22
  • 11266

为什么auto_ptr智能指针不能作为STL标准容器的元素

为什么auto_ptr不可以作为STL标准容器的元素 假如有这样的一段代码,是否能够运行? ? 1 2 3 4 5 ...
  • u014082714
  • u014082714
  • 2015年03月14日 17:00
  • 1241

C++:浅谈c++资源管理以及对[STL]智能指针auto_ptr源码分析,左值与右值

C++:浅谈c++资源管理以及对[STL]智能指针auto_ptr源码分析标签:STL 智能指针 auto_ptr 源码分析by 小威威// 2016.05.01 对第三部分源码分析中的复制构造函...
  • linwh8
  • linwh8
  • 2016年04月28日 00:31
  • 3924

c++构造函数中无法实现多态

今天简单写了个Factory Method,结果没有效果,很是纳闷。研究之后发现还是自己c++基础不牢固阿! #include class Factory {     public:   ...
  • fingding
  • fingding
  • 2011年09月21日 14:48
  • 2175

带你深入理解STL之List容器

上一篇博客中介绍的vector和数组类似,它拥有一段连续的内存空间,并且起始地址不变,很好的支持了随机存取,但由于是连续空间,所以在中间进行插入、删除等操作时都造成了内存块的拷贝和移动,另外在内存空间...
  • terence1212
  • terence1212
  • 2016年08月24日 17:29
  • 2737

继承与多态(五):虚复制构造函数

由于构造函数不能是虚函数,然而,程序有时候非常需要通过传递一个指向基类对象的指针,创建派生类对象的备份。常见的解决方法是:在基类钟创建一个Clone()成员函数,并将其设置为虚函数。Clone()函数...
  • ceasadan
  • ceasadan
  • 2015年12月05日 14:20
  • 225

JAVA构造函数内调用多态方法

看如下程序代码段: public class Test1 { public static void main(String[] args) { A b = new B(); ...
  • Kinger0
  • Kinger0
  • 2015年11月03日 22:11
  • 1271
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:依赖反转,异常,auto_ptr,多态,STL容器,虚构造函数
举报原因:
原因补充:

(最多只允许输入30个字)