
C++学习笔记
文章平均质量分 75
hh1562535601
想多学点东西。
展开
-
C++删除不完全类型数组
看智能指针的时候遇到一组函数蛮有意思的,即checked_delete(T* x)和checked_array_delete(T* x),这两个函数的作用是安全删除参数所指向的变量或数组。template inline void checked_delete(T* x){ typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];原创 2016-03-17 00:18:48 · 789 阅读 · 1 评论 -
Effective C++笔记(六)
条款41:区分继承和模板"当对象的类型不影响类中函数的行为时,就要使用模板来生成这样一组类。当对象的类型影响类中函数的行为时,就要使用继承来得到这样一组类。"条款42:明智地使用私有继承”当私有继承是你可以使用的最合适的实现方法时,就要大胆地使用它。同时,广泛意义上来说,分层是应该优先采用的技术,所以只要有可能,就要尽量使用它。“条款43:明智地使用多继承不正确原创 2015-11-04 09:45:42 · 433 阅读 · 0 评论 -
Effective C++(四)
条款25:避免对指针和数字类型重载因为0既可以是一个整型值,也可以是空指针。条款26:当心潜在的二义性二义性当然要避免,本条款强调的是“潜在”二字。很多时候,二义性会隐藏得很深,所以要尽可能地小心。条款27:如果不想使用隐式生成的函数就要显示地禁止它有些函数,当你没有声明定义它们时,编译器会自动为你生成,但它们是基于默认语义的,所以如果这不是你想要的,就需要显示原创 2015-11-02 19:48:35 · 347 阅读 · 0 评论 -
Effective C++笔记(三)
条款18:争取使类的接口完整并且最小接口要完整毫无疑问,最小也好理解,本来一个接口可以完成的事,非要写一百个接口,不是浪费人力嘛~其实作者强调的是,接口小,用户容易理解,不容易混淆,且容易维护。原创 2015-11-01 00:00:10 · 294 阅读 · 0 评论 -
Effective C++笔记(二)
条款9:避免隐藏标准形式的new在类里声明了一个带多个参数的operator new函数后,就无法以标准形式调用operator new,因为全局的operator new函数被成员函数遮蔽了。条款10:如果写了operator new就要同时operator delete这两个函数是成对使用的,它们之间要遵循一些共同的约定,如果重写了其中一个而不重写另一个,它们之间就难以保证原创 2015-10-29 17:20:07 · 333 阅读 · 0 评论 -
Effective C++笔记(一)
条款1:尽量使用const和inline而不要使用#defineC++从C继承来古老的预处理器,遗留了不少问题。预处理器更像是文本处理器,并不具有太多智能,编译器无法对预处理器的功能作过多检查和保障。过于依赖预处理器,就难以享受到编译器的强大智能。因此应该尽量使用编译器提供的机制,少用预处理器的功能。条款2:尽量使用而不是简单来说,就是比更新更高级,考虑的更多更全面,例如类原创 2015-10-28 17:44:29 · 365 阅读 · 0 评论 -
Effective C++(五)
条款33:原创 2015-11-03 17:40:39 · 374 阅读 · 0 评论 -
C/C++ const和volatile
前两天朋友叫我帮忙做几道题,遇到这样一道题: const int a = 10; int *p = (int*)(&a); *p = 20; cout 乍一看,似乎很明显,const关键字表示常量,不允许修改,那就应该会出现编译错误喽?哪有这么简单的事!我运行了一下,发现竟然可以正常编译运行,但是结果是a=10,*p=20.看起来有些不可思议,难道为原创 2015-04-04 15:51:13 · 552 阅读 · 0 评论 -
C++多重继承
封装、继承和多态是面向对象程序设计的三大特性。如今有非常多的语言支持面向对象编程,已经充分说明了面向对象思想的价值。C++是一门经典的面向对象程序设计语言,但是为了提供对C语言的向下兼容性,C++也支持面向过程编程,因此C++不是一门“纯粹” 的面向对象语言。据我所知,Java似乎是“纯粹”面向对象的,一切操作都必须封装到类里,连main()函数也是,所有类都直接或间接地由Object类派生而来。原创 2015-05-03 12:41:06 · 1194 阅读 · 0 评论 -
C++模版及其他
我的第一篇C++学习笔记,关于C++模版,偏特化、全特化,关键字class与typename的区别,一个struct与一个class的区别,iterator_traits等等,比较零乱吧。原创 2015-03-26 11:21:51 · 397 阅读 · 0 评论 -
boost并发编程(三)——共享互斥量
前一篇介绍的条件变量可以进行进程间通信,用来实现生产者/消费者模型。今天介绍的共享互斥量用来实现缓冲区读写模型,与生产者/消费者模型不同的地方是,消费者消费产品后,被消费的产品就不存在了,所以消费者线程也要互斥运行;而缓冲区读取线程读取数据后不删除数据,多个线程可以并行读取。这时使用条件变量也不合适了,就要使用共享互斥变量了。 共享互斥量,顾名思义,既共享,也互斥,读线程之间共享原创 2015-06-17 23:40:17 · 1510 阅读 · 0 评论 -
boost并发编程(二)——条件变量
这篇文章的内容其实是对《Boost程序库完全开发指南》里的相关内容进行讲解。原创 2015-06-12 19:06:21 · 2145 阅读 · 1 评论 -
boost并发编程(一)——互斥锁
这个系列其实是《Boost程序库完全开发指南》的读书笔记。按照书中的方法代码没跑起来,所以转到Ubuntu下学习了。boost库在Ubuntu下的安装,直接用apt-get install命令安装就可以了,需要安装libboost-dev libboost-system libboost-thread 我们直接上代码,通过讲解代码来学习。一方面,更详细的内容请参看原书,在此不作重原创 2015-06-16 23:23:30 · 3040 阅读 · 0 评论 -
初始化、赋值及内存模型
初始化和赋值在语法上比较相像,但有时会存在很大差别甚至根本就是完全两码事。原创 2015-04-21 12:12:52 · 429 阅读 · 0 评论 -
C++智能指针
智能指针原创 2016-04-04 18:00:37 · 499 阅读 · 0 评论