您的位置:首页 > 其它

写给自己的建议

2013-12-11 15:19 218 查看

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中写,这样无法验证数据是否是完整的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: