平时写c++程序需要注意什么

记一些几年前写c++经常会犯的一些错误,想到了其他的后面再加上

1、变量、函数命名不规范。

如果一个变量命名随意,比如表示一个学生的年纪,如果这样定义int a;相信一个月后自己再看代码,都不知道a表示什么意思,

如果用int age; 来表示,就清晰很多了。

再说函数,如果需要一个连接数据库的函数,写成connect();这是connect什么呢。如果写成connectDatabase()就很清晰了。

2、传递指针没有判断是否为空。传递对象、变量没有判断是否有效。

如果有一个接口是 void insertItem(Student *stu,int num); 其中Student表示学生类。如果在该函数中直接使用stu->getAge()。

这时候就无法保证程序的安全性,万一指针为空的话,调用getAge();就会导致程序崩溃。所以需要接口第一句就需要加判断if(stu==nullptr) return; 来确保程序的安全。如果num使用前不判断,比如说对num进行一个除的操作。此时num为0,那程序也会down掉。需要加上类似if(num==0) num=1;来确保num被除数不为0。

但凡使用的是外部传递进来的参数,使用之前一定要判断有效性,才能写出健壮性的代码。

3、new以后没有记得释放内存。

如果在一个循环中,频繁的new,又不释放,会导致程序内存不断增加,最终内存溢出,程序崩溃。曾经看过一个程序,没有操作放了10分钟,内存增加了100多M。new了要记得detele,谁new的,谁去释放,或者采取智能指针的方式来负责对象的销毁。

4、delete指针后没有记得把指针置为nullptr

如果delete ptr; 没有加ptr=nullptr,后面有接口有如下的判断 if(ptr!=nullptr) ptr->setNum();就会导致出现异常。 

5、试图返回局部对象的指针和引用。

如果返回一个局部对象的引用,比如说 Student& getInstance() {Student stu; stu.setAge(10);Student &r=stu; return r; }然后getInstance.getAge();会导致输出的值并不是10,而是一个随机值。因为局部对象存在于栈中,函数一结束,就会被释放,这时候用这个没有内存的地址去调用接口,当然无法取得之前局部对象设置的值。

指针如果在局部new,并且返回出去使用,那么谁去销毁呢。让使用接口的客户去销毁,是不合理的,因为如果使用者忘记销毁,那么就会造成内存泄漏。

6、打开了文件流,却没有进行关闭。

类似以下,file.open("log"); file.read(");但是直到函数结束,都没有file.close()。这会导致再次打开文件时,发现文件句柄被占用,导致打开失败。类似的还有tcp/udp的close()等等。凡是打开的流操作,都要记得close()掉,避免不必要的错误产生。

7、使用了lock()后,在某些条件的return没有unlock()。

这会导致死锁现象的产生,切记,凡是lock()的地方,一定要在函数可能退出的地方进行unlock()。

欢迎大家补充经验

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值