1.写函数时,如果有返回值,首先写return 语句
在linux写 c++一个函数声明了有返回类型,但是不返回对象也可以编译通过,但是运行会出现莫名其妙的错误,
析构函数析构错误,
class Object
{
Object operator =(const Object &a)
{
value=a.value;
}
}
当我调用 Object a=Object b;
是会出现析构错误,具体原因是当=操作以后,临时对象需要析构掉,operator =返回的那个临时对象,但是operator= 并没有换回对象,他会曲堆栈前一个字节当做临时对象析构。
2. 谨慎用memset()重置对象,
为了方便,同时也为了效率,程序员经常看到memset(this,0,sizoeof(*this)),这样来重置对象,这样是错误的,如果对象中含有非简单数据类型,是很容易出错的
class A
{
int ;
string b;
}
对于这个对象调用memset();但给 A.b重新赋值时就会出错。
3.函数一定要完成自己期望的所有功能,并且功能尽可能简单
我有个函数 bool combine(object &a ,object &b);写的注释是把 a,b合并,并把合并结果写到a,并把b清空。结果实现的时候忘记了清空b,测试时候只见到测试了合并的结果,没有测试把b清空,导致后来集成测试才出现错误,结果这个bug花了我很长时间才找出来。
4. 调用网络操作的API一定要设置超时,或者一定要清楚该API副作用
在curl http 操作中,我程序运行一段时间就假死,后来排查发现还是http get请求服务返回,整个程序阻塞这这,该curl_easy()为同步接口,当时因为只想要个http get操作,结果没有好好看看curl api就乱用导致后来程序假死,搞得我总是无法理解。
5.关于传数据一些建议
(1)对于client 要有控制速度的机制,和错误检查机制,检查是否发送成功
(2)对于server文件存储,最好是顺序存储,同时尽量少调用open操作,这个需要访问 共享inode消息。write ,read 相比fstrean减少了一次用户态到内核态的copy。
(如何检查程序错误) 数据完整性, 数据处理正确性
故意写入些脏数据,在client读取数据源中写入些脏数据,不能再client中写,这样无法验证数据是否是完整的