养成良好的C++编程习惯(持续更新)
c++语言的灵活是建立在对编程者个人的编程素质的严格要求基础上的,好的C++编程习惯能避免很多问题。
没有好的编程习惯,极有可能编写一行代码,编译器能报十几个错误,而且就算编译通过了,将来在运行过程中也会有很多莫名奇妙的问题。
- 给字符串分配内存的时候,new char[]与 new char[size] 尽量用后者
下面这段代码在debug和releae模式下不出问题,但是生产环境下,有的时候不报错,有的时候报错报得能让你怀疑人生。

经验是:不要把c++想得太智能了,很多时候还是要编程者自己老老实实把东西写明确了。

- 主线程里面如果有子线程的话,退出的时候,最好在主线程结束前,等待全部子线程自然关闭。
- 栈分配的大小是有限制的,在不同的编译器里面最大大小有不同限制。
如下面的:
#define
BUFSIZE (1* 1024 *1024) // 1M//设置太大了,会 栈溢出
class
A
{
protected:
unsigned
char
buffer[BUFSIZE];
};
像这种局部变量,都是系统自动分配,分配在栈上。栈分配空间过大,会出现stack overflow的错误。
- 指针作为函数的形参传递时,出了这个函数体,指针是不会改变所指向的地址的
类似于这种 int creat(struct soldier *s_head,int c,int m) 函数,想要在函数体内把s 指向其他的地址,出了函数体之后,发现s还会是原来的地址。
只能改成 int creat(struct soldier **s_head,int c,int m)这种方式,改变指针所指向的地址的值,并且还要在函数中有些地方可能也要修改一下,
如:s_head=s_p=s_q=0; 改为 *s_head=s_p=s_q=0;
- Dll封装的时候一般是哪里申请哪里释放,谁申请的内存由谁释放,这是封装的基本原则。
如果一定要在dll里面new 空间出来给其他模块使用,那么一定在这个dll里面有一个释放空间的接口供其他模块回收空间,比如说
DLL:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
_declspec(dllexport) void testFunc(char **tmp)
{
*tmp = (char *)malloc(sizeof(char)*100);
memset(*tmp,'\0',100);
strcpy(*tmp,"susan");
}
_declspec(dllexport) freeTestFuncMemory(char **tmp)
{
if(NULL != *tmp)
{
free(*tmp);
}
}
- 当一个类的成员里面有指针成员时,记得要给类添加复制构造函数,复制构造函数及析构函数里面要加上对指针成员的处理
比如
class
CFileDownUpModel{
public:
CFileDownUpModel();
~CFileDownUpModel();
CFileDownUpModel(const
CFileDownUpModel& model);//复制构造函数char* Id;
char* Path;
};
CFileDownUpModel::CFileDownUpModel(const
CFileDownUpModel& model) :Id(0), Path(0), Remark(0), strFileId(0),FileSize(0),
DownUpSize(0),
DownUpType(0),
Finish(0),
StartTime(0),
EndTime(0)//复制构造函数
{
if (model.Id)
{
size_t
length = strlen(model.Id) + 1;
Id = new
char[length];
memset(Id, 0, length);
memcpy(Id, model.Id, length);
}
…
….
}
养成良好的C++编程习惯(持续更新)的更多相关文章
- 养成这8个编程习惯,你的Python性能将蹭蹭蹭地往上涨
Python不以性能见长,但掌握一些技巧,也可尽量提高程序性能,避免不必要的资源浪费. 1. 使用局部变量 尽量使用局部变量代替全局变量:便于维护,提高性能并节省内存. 使用局部变量替换模块名字空间中 ...
- MySQL操作中的一些细节及良好习惯--------持续更新中...
1.尽量不要写太过复杂的SQL查询,不要想着非要一次性将结果全部以前端要求的形式返回出来,可以多次分开查询,这样逻辑清晰,问题解决速度快,方便维护,并且SQL的效率也高. 2.在使用联表查询的时候,关 ...
- 一些有意思的面试题(持续更新) .C语言编程技巧札记
一些有意思的面试题(持续更新) http://blog.csdn.net/wangyuling1234567890/article/details/38565239 C语言编程技巧札记 http:// ...
- [读书]10g/11g编程艺术深入体现结构学习笔记(持续更新...)
持续更新...) 第8章 1.在过程性循环中提交更新容易产生ora-01555:snapshot too old错误.P257 (这种情况我觉得应该是在高并发的情况下才会产生) 假设的一个场景是系统一 ...
- 4W字的后端面试知识点总结(持续更新)
点赞再看,养成习惯,微信搜索[三太子敖丙]关注这个互联网苟且偷生的工具人. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的 ...
- ( 译、持续更新 ) JavaScript 上分小技巧(一)
感谢好友破狼提供的这篇好文章,也感谢写这些知识点的作者们和将他们整理到一起的作者.这是github上的一篇文章,在这里本兽也就只做翻译,由于本兽英语水平和编程能力都不咋地,如有不好的地方也请多理解体谅 ...
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
code&monkey Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...
- PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)
PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++: 欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...
- BAT 前端开发面经 —— 吐血总结 前端相关片段整理——持续更新 前端基础精简总结 Web Storage You don't know js
BAT 前端开发面经 —— 吐血总结 目录 1. Tencent 2. 阿里 3. 百度 更好阅读,请移步这里 聊之前 最近暑期实习招聘已经开始,个人目前参加了阿里的内推及腾讯和百度的实习生招聘, ...
随机推荐
- JAVA中static的作用
static表示"全局"."静态"的意思,用来修饰成员变量和成员方法,不过在JAVA中没有全局的意思. 1. 被static修饰的成员变量和成员方法独立于该类的 ...
- poj3104 Drying(二分最大化最小值 好题)
https://vjudge.net/problem/POJ-3104 一开始思路不对,一直在想怎么贪心,或者套优先队列.. 其实是用二分法.感觉二分法求最值很常用啊,稍微有点思路的二分就是先推出公式 ...
- 输出cglib以及jdk动态代理产生的class文件
--该设置用于输出jdk动态代理产生的类 System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles&q ...
- Spring Mvc配置多视图 - tiles, velocity, freeMarker, jsp
<!-- Velocity --> <bean id="velocityViewResolver" class="org.springframework ...
- Spring Data JPA使用getOne方法报错:Method threw 'org.hibernate.LazyInitializationException' exception. Cannot evaluate
getOne是懒加载,需要增加这个配置: spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true,但这种方式不太友好,建议不要使用 ...
- Map:目录
ylbtech-Map:目录 1.返回顶部 1.百度地图 http://lbsyun.baidu.com/ 2.高德地图 http://lbs.amap.com/ 3. 2.返回顶部 3. ...
- vue项目启动时将localhost替换成指定ip地址
1.node启动vue项目时地址一般都是http://localhost:8080 2.config->index.js 中的host:‘localhost’换成host:‘你的本机ip’就可以 ...
- 前端后台以及游戏中使用Google Protocol Buffer详解
前端后台以及游戏中使用Google Protocol Buffer详解 0.什么是protoBuf protoBuf是一种灵活高效的独立于语言平台的结构化数据表示方法,与XML相比,protoBuf更 ...
- Swagger Annotation 详解(建议收藏)
转载:https://www.jianshu.com/p/b0b19368e4a8 在软件开发行业,管理文档是件头疼的事.不是文档难于撰写,而是文档难于维护,因为需求与代码会经常变动,尤其在采用敏捷软 ...
- ESP-EYE V2.1 开发板 WINDOWS 10 开发入门
准备工作 1 × ESP-EYE V2.1 开发板 1 × Micro USB B 电缆 1 × PC(Windows10) 简介 ESP-EYE 是一款面向人脸识别和语音识别市场的开发板,搭载 ES ...