c++语言的灵活是建立在对编程者个人的编程素质的严格要求基础上的,好的C++编程习惯能避免很多问题。

没有好的编程习惯,极有可能编写一行代码,编译器能报十几个错误,而且就算编译通过了,将来在运行过程中也会有很多莫名奇妙的问题。

             
 

  1. 给字符串分配内存的时候,new char[]与 new char[size] 尽量用后者

    下面这段代码在debug和releae模式下不出问题,但是生产环境下,有的时候不报错,有的时候报错报得能让你怀疑人生。

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

       
     

  2. 主线程里面如果有子线程的话,退出的时候,最好在主线程结束前,等待全部子线程自然关闭。

             
     

  3. 栈分配的大小是有限制的,在不同的编译器里面最大大小有不同限制。

    如下面的:

    #define
BUFSIZE (1* 1024 *1024) // 1M//设置太大了,会 栈溢出

    class
A

{

protected:

unsigned
char
buffer[BUFSIZE];

};

         
 

像这种局部变量,都是系统自动分配,分配在栈上。栈分配空间过大,会出现stack overflow的错误。

 

  1. 指针作为函数的形参传递时,出了这个函数体,指针是不会改变所指向的地址的

    类似于这种 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;

           
     

  2.    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);

                         }

              }

       
     

  3. 当一个类的成员里面有指针成员时,记得要给类添加复制构造函数,复制构造函数及析构函数里面要加上对指针成员的处理

    比如

    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++编程习惯(持续更新)的更多相关文章

  1. 养成这8个编程习惯,你的Python性能将蹭蹭蹭地往上涨

    Python不以性能见长,但掌握一些技巧,也可尽量提高程序性能,避免不必要的资源浪费. 1. 使用局部变量 尽量使用局部变量代替全局变量:便于维护,提高性能并节省内存. 使用局部变量替换模块名字空间中 ...

  2. MySQL操作中的一些细节及良好习惯--------持续更新中...

    1.尽量不要写太过复杂的SQL查询,不要想着非要一次性将结果全部以前端要求的形式返回出来,可以多次分开查询,这样逻辑清晰,问题解决速度快,方便维护,并且SQL的效率也高. 2.在使用联表查询的时候,关 ...

  3. 一些有意思的面试题(持续更新) .C语言编程技巧札记

    一些有意思的面试题(持续更新) http://blog.csdn.net/wangyuling1234567890/article/details/38565239 C语言编程技巧札记 http:// ...

  4. [读书]10g/11g编程艺术深入体现结构学习笔记(持续更新...)

    持续更新...) 第8章 1.在过程性循环中提交更新容易产生ora-01555:snapshot too old错误.P257 (这种情况我觉得应该是在高并发的情况下才会产生) 假设的一个场景是系统一 ...

  5. 4W字的后端面试知识点总结(持续更新)

    点赞再看,养成习惯,微信搜索[三太子敖丙]关注这个互联网苟且偷生的工具人. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的 ...

  6. ( 译、持续更新 ) JavaScript 上分小技巧(一)

    感谢好友破狼提供的这篇好文章,也感谢写这些知识点的作者们和将他们整理到一起的作者.这是github上的一篇文章,在这里本兽也就只做翻译,由于本兽英语水平和编程能力都不咋地,如有不好的地方也请多理解体谅 ...

  7. Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G

    code&monkey   Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...

  8. PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)

    PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++:      欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/ ...

  9. BAT 前端开发面经 —— 吐血总结 前端相关片段整理——持续更新 前端基础精简总结 Web Storage You don't know js

    BAT 前端开发面经 —— 吐血总结   目录 1. Tencent 2. 阿里 3. 百度 更好阅读,请移步这里 聊之前 最近暑期实习招聘已经开始,个人目前参加了阿里的内推及腾讯和百度的实习生招聘, ...

随机推荐

  1. 深入理解JVM(5)——HotSpot垃圾收集器详解

    HotSpot虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,没有最好的垃圾收集器,只有最适合的垃圾收集器.根据新生代和老年代各自的特点,我们应该分别为它们选择不同的收集器,以提升垃圾回收效率. ...

  2. uestc 猛男搜索26题 by qscqesze

    https://vjudge.net/contest/202940#overview 不断更新

  3. 【网站seo优化】SEO优化每天的工作内容是什么?

    [网站seo优化]SEO优化每天的工作内容是什么?从未知的领域来到seo,感到搜索引擎无比神奇,接触seo久了,有每天必做的工作内容,大量的seo从业者,每天的工作内容大同小异,主要做的工作有通过相应 ...

  4. SpringMVC(2)—SpringMVC整合Spring的HelloWorld

    一.这是一个SpringMVC框架的案例HelloWorld 功能:HelloWorld 二.SpringMVC运行流程 1.流程 请求-->springDispatcherServlet的ur ...

  5. Using async-await on .net 4

    I'm currently starting to create an application that would profit a lot from C# 5's async-await feat ...

  6. 【JavaScript 插件】图片展示插件 PhotoSwipe 初识

    前言: 考虑自己网站的图片展示,而且要支持移动端和PC端.自己写的代码也不尽如意,要写好的话也需要时间,于是就想到了使用相关插件. 准备: PhotoSwipe 官网地址:http://photosw ...

  7. Linux中查看文件夹占用磁盘大小

    一.命令 ./ du -h ./ 查看当前目录占用空间 二.样例

  8. 一步步教你轻松学关联规则Apriori算法

    一步步教你轻松学关联规则Apriori算法 (白宁超 2018年10月22日09:51:05) 摘要:先验算法(Apriori Algorithm)是关联规则学习的经典算法之一,常常应用在商业等诸多领 ...

  9. intellij 自动导包

  10. iOS--App功耗优化

    良好的用户体验需要如下要素: 电池寿命长.随着能效降低,电池寿命也会降低.但用户想让自己的移动设备全天候待命. 速度快.iOS系统处理复杂操作时仍能提供很好的性能. 响应快.同一时刻消耗太多资源会使U ...