Effective C++
文章平均质量分 82
Icoding_F2014
相信代码可以变化世界
展开
-
Effective C++,Rule 3,使用const
前言const允许用户定义一个语义上的约束。”语义”上是指约束只作用在源代码层上,而不能在汇编这一层发挥作用。”约束”是指一种限制要求,这要求const修饰的对象不应该被修改。在实际的开发中,应该保证所有那些在逻辑上具有”不改被修改”的对象都应该使用const来修饰之。至于这么做的好处,更多的是在源代码层这一层保证进程空间内数据的完整性,在很大程度上避免对关键数据的不恰当修改而导致的出乎意料的错误。原创 2017-04-30 08:37:23 · 560 阅读 · 0 评论 -
C++ 转型动作的新认识
之前学习C/C++的时候一直都认为类型转换(不管是显式的还是隐式的)其实什么都没有做,只是告诉编译器类型改变了一下,让它的翻译内存二进制数据的时候以新类型的套路去翻译而已。 然而当我看到Effective C++ rule 27.关于转型动作会触发其它动作时,我是很惊讶的。先贴出一段代码来看看,转型并不是什么都没有做,相反,它做了很多事情,我们一一来看。#include <stdio.h>#i原创 2017-10-12 11:06:17 · 413 阅读 · 0 评论 -
C++ 函数模板
什么是模板函数:通过函数模板生成的函数。 什么是函数模板:一组定义好的具有和函数类似的结构单元,这类结构单元将变量的类型视为变量,同时该结构定义了一组适用于多种类型的相同的算法逻辑。这类结构类似于函数,但是它们其实一些临时的结果,它们并不存在于最终的二进制文件中。 为什么要模板函数: 假设我们有一个函数:void swap(int & a,int &b){int temp=a;a=b;原创 2017-09-21 17:01:37 · 315 阅读 · 0 评论 -
Effective C++ rule 22.类成员变量尽量声明为private
前言Effective C++ 的rule 22在讨论类成员、函数的封装性,并给出了一些良性的忠告。什么是封装 Data hiding is one of the important features of Object Oriented Programming which allows preventing the functions of a program to access原创 2017-09-08 18:07:54 · 527 阅读 · 0 评论 -
STL源码分析之vector(三)—其它函数 eraser()、operator[]和operator =
说明: STL源码分析系列博客的使用的是https://www.sgi.com/tech/stl/download.html 里面的STL v2.03版.不同的STL或许会有所不同。 其它vector内容请参照本系列其它博客。 STL源码分析之vector(一) 基本数据类型及构造函数STL源码分析之vector(二)—核心函数 push_back及insert_aux STL源码分析之vecto原创 2017-09-14 10:59:17 · 1768 阅读 · 0 评论 -
C++ new和delete的原理分析
前言Effective C++ rule 16规则,让我重新认识了delete与new在处理数组时候的方式。new 有两种形式的new,一种是生成一个对象的operator New,另一个是用于数组的operator new []。同时 operator delete也分普通版本的operator delete 以及数组版的operator delete[].先说结论系列1.Operator new原创 2017-08-28 13:55:33 · 8272 阅读 · 0 评论 -
Effective C++ rule 21.尽量不要返回reference.
Effective C++ rule 21.不要返回reference.前言Rule 21.说的主要是指 如果函数必须返回一个对象,那么最好不要去返回一个引用。可能有些人会出于效率的考虑而返回对象的引用,但是返回引用虽然效率高了一点点却带来了另外的几个大麻烦:如果该对象是个局部对象,那么函数结束时,对象已经被释放,reference引用将会出错。如果该对象是个堆搞出来的动态对象,虽然函数结束时对原创 2017-09-06 07:27:12 · 447 阅读 · 0 评论 -
Effective C++ rule 20.传参与传引用
前言Rule 20 阐述了我们在设置函数的形参时,尽量以pass by reference const 的形式,少用pass by value.主要基于效率和行为考虑的。代码讲解#include <stdio.h>#include <iostream>#include <string>using namespace std;class Person{public: string原创 2017-09-05 09:18:40 · 295 阅读 · 0 评论 -
Effective C++ 在资源管理类中提供对原始资源的访问
前言前面提到,我们使用栈对象来管理资源已达到对资源的正确回收,防止资源泄露的目的。有了资源管理类后,我们还需要再类里面提供对资源的访问方法,不然如果我们无法通过管理类来对资源进行访问,那我们还是会直接绕过管理类去直接访问资源,酱紫是不好的。 一般来说,资源管理类可以提供两种方式供外界去访问它所管理的资源:显式访问和隐式转换。显式访问所谓显示访问就是在管理类的内部提供某个函数,使得外界可以得到资源的原创 2017-08-05 15:53:21 · 446 阅读 · 0 评论 -
Effective C++ rule 14 在资源管理对象中处理好copy行为
前言上节说到,为了能够方便的管理资源,达到自动释放资源的目的,我们提出了使用栈对象管理资源的思想。其中,上一节我们重点介绍了如何处理动态内存资源。但是处理动态分配的内存资源外,还有一些其他的资源,例如 互斥锁/信号量,文件描述符,等等,这些东西有自己的特有的资源管理需求。互斥锁需要在离开临界区时及时unlock,而不是像内存管理那么delete掉。这个时候就需要我们自己定制资源管理类了。然后,自己定原创 2017-08-04 16:28:10 · 779 阅读 · 0 评论 -
Effective C++ rule 13 用对象管理资源
前言在C++里面,我们经常会像系统申请一些资源,这些资源包括最常见的动态分配的内存,已经文件描述符,互斥锁,套接字等等。很多时候,我们需要确保在任何情况下 在不使用这些资源的时候都及时释放资源。不然将会造成内存泄漏等等的原因。我们可以编写逻辑严密的代码来保证资源在不被使用时能够及时释放,当时当考虑到异常的发生,函数多返回路径,其他同事未能充分理解代码而加入某些continue/break/retur原创 2017-08-03 11:19:41 · 927 阅读 · 0 评论 -
Effective C++ rule 10-11 赋值运算符注意点
前言在C++中,所有对象包括非类的成员以及类的成员变量在使用前都要尽量做到先初始化。如果使用没有初始化的对象,有些情况下会导致程序崩溃,有些情况不会崩溃但是程序会以一种不是我们想要的逻辑执行。因此,C++的初始化显得尤为重要。三条建议手工初始化内置型非成员对象使用初始化列表来初始化类的成员 使用初始化列表初始化类的成员变量主要的优点是”高效”.高效的原因是在本类的构造函数调用前调用成员变量的构原创 2017-08-01 10:40:39 · 438 阅读 · 0 评论 -
Effective C++ rule12 复制对象时勿忘其每一个成分
前言有的时候,我们通常会自己给类定制复制函数,包括复制构造函数以及赋值运算符,但是复制函数并不是我们想象的那么好维护,本文主要着重于编写复制函数时“勿忘其每一个充分”这一个我们误以为做到了但通常上并没做到的点。举个例子dont talk ,show me your code code 1.1#include <stdio.h>#include <string>using namespace s原创 2017-08-02 10:51:37 · 388 阅读 · 0 评论 -
Effective C++,rule 4,确保对象使用前被初始化
前言在C++中,所有对象包括非类的成员以及类的成员变量在使用前都要尽量做到先初始化。如果使用没有初始化的对象,有些情况下会导致程序崩溃,有些情况不会崩溃但是程序会以一种不是我们想要的逻辑执行。因此,C++的初始化显得尤为重要。三条建议手工初始化内置型非成员对象使用初始化列表来初始化类的成员 使用初始化列表初始化类的成员变量主要的优点是”高效”.高效的原因是在本类的构造函数调用前调用成员变量的构原创 2017-05-26 22:04:01 · 335 阅读 · 0 评论 -
C++ 在类里面使用多线程技术
前言有很多时候,我们希望可以在C++类里面对那些比较耗时的函数使用多线程技术,但是熟悉C++对象语法的人应该知道,C++类的成员函数的函数指针不能直接做为参数传到pthread_create,主要因为是C++成员函数指针带有类命名空间,同时成员函数末尾是会被C++编译器加上可以接收对象地址的this指针参数。因此需要将成员函数做一定的转化,将其转化为不被编译器加上this指针,而由我们自己来为该函数原创 2017-05-16 07:24:13 · 14478 阅读 · 3 评论 -
STL 源码分析之string(二)基础篇—append,reserve,assign
STL源码下载:https://www.sgi.com/tech/stl/download.html vs工程代码:http://download.csdn.net/download/jmh1996/10032316其中string类需要在3.1以后的版本才有定义。 如果对basic_string和_String_base结构不熟悉的可以随时看上一篇博客: STL源码分析之string(一)原创 2017-10-26 21:50:46 · 2490 阅读 · 1 评论