目录

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

可迭代对象,第二次迭代出问题。

2