意识形态1:构造函数对于自身成员的赋值操作尽量使用初始化列表完成。
常规形态:
public MyCls:MyCls(int iobj)
{
    m_iobj=iobj;
}
意识形态:
public MyCls:MyCls(int iobj):m_iobj(iobj)
{}
意识形态2:使用const、enum、inline替换#define
常规形态:
#define PI 3.14
意识形态:
const double pi=3.14
意识形态3:尽可能使用const
如果const出现在星号左边,则被指物为常量;如果出现在星号右边,则指针本身为常量。
注意:const MyClass*与MyClass const * 是一个意思!

意识形态4:虚析构函数的用法

1>基类应该具备一个虚析构函数

2>非基类不要提供虚析构函数

3>具备其他虚函数的类(很可能作为基类)应该具备一个虚析构函数

意识形态5:析构函数绝对不要抛出异常

意识形态6:绝对不要在构造或是析构函数中调用虚函数,因为它们不会被传递给子类

意识形态7:operator=中需要考虑自我赋值的问题

意识形态8:

1>Copying函数设计时务必确保复制“对象内的所有成员变量”;

2>如果该对象为子类,则除此之外,还要复制“基类的全部成员变量”;

3>不要使用一个Copying函数实现另一个Copying函数,如果有必要,务必将共同部分放入第三个函数,而后二者共同调用之。

意识形态9:如果在new表达式中使用[],则相应的delete表达式一定也要使用[];反之,如果new表达式没有使用[],相应的delete表达式一定不要使用[]

意识形态10:函数的实参最好不要以嵌套构造函数的形式出现,尤其设计到指针new的时候,非常容易造成内存泄露。

错误形式:processWidget(std::tr1::shared_ptr<Widget>(new Widget),priority());

正确形式:std::tr1::shared_ptr<Widget> pw(new Widget); //事先将newed对象置入智能指针之中

processWidget(pw,priority());

说明:

错误形式的表达式核算涉及三个步骤:

1>调用priority

2>执行new Widget

3>调用tr1::shared_ptr构造函数

C++不同于C#或是Java,其构造函数的调用没有绝对的先后顺序。

如果此时new Widget先被执行,而调用priority出现异常,则指针便没办法再置入智能指针中,以实现动态释放的功能。此时即产生内存泄漏。

★意识形态11:函数设计时尽量使用址传递替代值传递

错误形式:bool Fun(Student s);

正确形式:bool Fun(const Student& s); //Student为自定义类型

说明:

1>值传递会导致构造函数与析构函数的多次不必要调用,成本较高。

2>值传递会导致对象在函数生命周期结束时被释放掉,容易丢失信息。

3>值传递容易导致意外的对象切割(derived class)现象。

4>使用const修饰的址传递方式,没有额外的构造析构函数调用,效率高,且对象在函数内部不允许变更,安全性好。

注意:该条款不适于内置类型及STL,仅适用于自定义类型!

★意识形态12:成员变量尽量声明为private

说明:类内部的成员变量往往声明为私有,并辅之于相应的属性函数,以提供更加细微的访问权限。同时,客户不会因为服务类内部一个变量的取消而导致大规模的代码变更,为工程后期的维护提供弹性。

注意:不要考虑protected,它的破坏度和public成员类似。

C++ Coding潜意识(-ing)相关推荐

  1. 潜意识微笑,与钱无关——博客获奖有感

    五一放假,再加上提前请了两天,也因此距离上一篇博文已经近一个星期了. 坐了一天的火车,昨天回到住处已是很晚,也因此上博客只回复了下留言,未有更新内容. 今天本来也没打算好更新内容的,一方面是没有想好题 ...

  2. 从coding走向管理

    今天来聊聊技术管理的问题. 我的读者里面,有不少是在读的学生或刚毕业的新人.有人可能会抱怨,我才初入职场,试用期都还没过,办公室的椅子都还没坐热呢,你跟我谈管理:我不听!我不听! 其实呢,就算对于普通 ...

  3. Competition——AI:国内外人工智能比赛平台以及竞赛类型、竞赛题目、举行时间等之详细攻略(最全+ing)

    Competition--AI:国内外人工智能比赛平台以及竞赛类型.竞赛题目.举行时间等之详细攻略(最全+ing) tips (1).可以在各大比赛平台指定的讨论区,或者github网站上,找到历届选 ...

  4. Compression-Expansion Coding Improvements in MLC/TLC NVM论文解读

    文章目录 写在前面 背景知识 已有方案和架构思考 CompEX编码方案 核心思想 CompEx编码对压缩技术的选择 expand coding(扩展编码) 编码的数学定义 编码的实例 数据的压缩 核心 ...

  5. 【树模型与集成学习】(task2)代码实现CART树(更新ing)

    学习心得 task2学习GYH大佬的回归CART树,并在此基础上改为分类CART树. 更新ing.. 这里做一些对决策树分裂依据更深入的思考引导:我们在task1证明离散变量信息增益非负时曾提到,信息 ...

  6. 程序员的酸甜苦辣——告别Coding

    程序员的酸甜苦辣--告别Coding<script language="javascript" type="text/javascript"> do ...

  7. 本人部分博客导航(ing...)

    原文地址为: 本人部分博客导航(ing...)   Deep Learning学习笔记: Deep learning:五十一(CNN的反向求导及练习) Deep learning:五十(Deconvo ...

  8. Python3常用其他API速查手册(持续更新ing...)

    诸神缄默不语-个人CSDN博文目录 最近更新时间:2023.5.11 最早更新时间:2022.6.27 运算符 + - * / 取余% 开方** 等式:= == > < >= < ...

  9. coding中预览html,通过 Coding 实现 Axure 原型托管 , WebIDE实现在线预览

    注册 Coding 账号这步就省略了...接下来步入正题~ 登录 Coding,新建一个项目... 码市新建项目 名称,项目描述,下面启用 README.md 可随意勾选,点击创建 PS :我还是不勾 ...

最新文章

  1. P2759 奇怪的函数(二分答案,数学运算)
  2. MySQL - 索引下推 Index Condition Pushdown 初探
  3. spring源码构建以及模块划分和依赖
  4. Spring入门 IOC
  5. MySQL 后from多个表_MYSQL回顾(多表查询相关)
  6. 一个下载Google code源码的 绿色、迷你工具 MiniSVN v1.0
  7. 虚拟机fedora共享_开源虚拟现实,用于电子测试的新电路板,Fedora 25,以及更多新闻
  8. linux终端打开浏览器_终端可以放电影,一行代码就能实现
  9. 能做多大的单片机项目程序开发,就代表了你的敲代码的水平
  10. DOM的利用冒泡做的一个小程序
  11. Flash总弹出广告怎么办?该如何删除?
  12. 发那科机器人override指令_发那科机器人如何改变自动的运行速度,为什么按加减后,焊接完成又变回原来的速度...
  13. Android毕设项目功能:商城列表与购物车展示(一)
  14. 【爬虫知识】浏览器开发者工具使用技巧总结
  15. jira迁移问题解决(实践篇)
  16. for_while循环作业
  17. 关于openlayers图层的放大缩小以及中心坐标
  18. Ubuntu 18.04 安装 fcitx 中文输入法
  19. 帝国 CMS 信息反馈 功能修改 牵扯到的文件
  20. K线形态识别_下探上涨

热门文章

  1. 如何编写一个抢购bot_如何编写一个SkyWalking插件
  2. micropython教程nucleo-f767zi开发板_Micropython教程之TPYBoard开发板制作电子时钟(萝卜学科编程教育)...
  3. php挂qq,PHP在线挂QQ个人隐私泄漏
  4. yum -y install php-mysql 版本冲突
  5. java高级程序员如何写好简历,一份优秀的程序员简历是什么样的?
  6. redis 数据类型详解 以及 redis适用场景场合
  7. 【操作系统/OS笔记05】非连续内存分配:分段、分页、页表
  8. linux挂载nfs权限不够,无法写入挂载点(nfs-server),获得“权限被拒绝”
  9. php使用函数封装去除空格,去除php注释和去除空格函数分享_PHP教程
  10. php有ssm框架吗,SSM框架-企业门户网站-1-工程构建