6.避免特定编程语言的陷阱
目录
C++
-
每种编程语言都有各自的缺陷,C++陷阱尤其多。
-
数组/内存越界:对于 C++来讲 vector 代替数组,用 string 代替 char*
-
野指针
- 没有初始化或者己经被 delete (java/python 会抛异常,属于第二类错误,对于 C++属于第三类错误);能调用,不抛异常;
- 应对:定义针时初始化,delete 时赋值为 nullptr,使用智能指针。
-
内存泄露
- 忘记 delete,中途 return 或抛出异常,循环中 break;
- 应对:使用智能指针,用统一的方式处理资源释放问题 (goto + exit)
-
非类型安全
- 数组作为参数传递时长度信息丢失(java, python 没这个问题)
- 虚函数的默认实参是静态绑定,而虚函数本身是动态绑定
- 用下标引用 map 的键时,如果该键值不存在,会新生成一个(python 会抛异常)
- map<int,int> m;
- int i= m[2]; // m[2] 为 0;违背直觉,Supprise。
1 Python
可迭代对象,第二次迭代出问题。