c++的点点滴滴

说实话c++是一门极其复杂的语言,要想学好不是一朝一夕的事,是一个逐渐积累的过程,在这里分享一些我看过的认为一些c++中比较重要的,或者写的比较优秀的c++文章或者博客,暂时这么多,来日方长慢慢补充。

1.如何学习c++:点击打开链接,推荐了一些c++书籍。

2. c++拷贝构造函数详解:点击打开链接,这里补充一点拷贝构造函数参数为什么必须是引用类型,引用是为了防止拷贝构造函数无限递归,最终导致栈溢出,例:一个拷贝构造函数为值传递的类Test,当我们调用Test  test(a)是,会在传递参数时生成一个临时变量b,此时又发生了拷贝构造Test b(a),此时的调用过程如下:

Test  test(a) ==> Test test(Test  a(b)) ==>  Test test(Test  a(Test b(c))).....

3. c++虚函数表解析点击打开链接 ,注意评论,指出了文章关指针长度的一个错误,最好把文章中的程序自己在电脑上跑一跑。关于这个表达式可能有点难以理解,解释下:pFun = (Fun)*((long*)*(long*)(&b)),首先(&b)取到对象b的地址,由于对象中没有成员变量,所以这个地址里的数据保存着虚函数表的地址换言之这里是一个指向指针的指针(注:关于虚函数表在c++对象中内存的头部说法不一),(long*)(&b)把Base*类型转换成long* 类型的,*(long*)(&b),通过*取到虚函数表的地址,我们可以把这张表看成一个数组,此时我们得到虚函数表的首地址,(long*)*(long*)(&b),把这个地址转换成long*类型,*((long*)*(long*)(&b)),这里我们取表中的前8个字节(sizeof(long)),即表中的第一个元素,得到的就是第一个虚函数的地址, (Fun)*((long*)*(long*)(&b)),把指针类型转换成我们需要的函数指针类型,下面通过+1,+2取第二个第三个虚函数其实就是数组中的指针运算。进一步深入的了解:点击打开链接

4.sizeof 的坑:点击打开链接虽然是个很小的的知识点,但是这个东西一步小心就会造成严重的后果,往往是内存级别的问题

5:c++模板:点击打开链接,在一些大型的项目中必要的模板可以起到很好的抽象和代码复用的效果,最后在附上我自己写的关于c++模板分离式的问编译题:点击打开链接

6:c++虚析构函数的作用:点击打开链接,这里做一个对文章中的一句话做个补充,虚函数的作用是为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用,应该是也会被调用,此时应该是先调用子类的析构函数后调用父类的析构函数,否则只会调用父类的析构函数,当然当类中没有虚函数数时是不会发生这种情况的。

7.陈硕老师c++实践经验:https://github.com/downloads/chenshuo/documents/CppPractice.pdf,很值得一看

8.基于libevent的c++网络库 :点击打开链接 ,libevent是一个高性能的c网络库,通常用在高并发的场景中,但是他是c的如果在c++中用必须进行二次封装,并且它自身不是线程安全的的,如果要开发多线程需要做很多工作,很长时间以来都在找关于libevent的c++封装,无意中看到360 github上有这么一个好东西,分享给大家。

9.当析构函数遇到多线程-c++线程安全的对象回调.点击打开链接说句实在话,在看到这篇文章之前我觉得在c++类里面对共享的成员加上锁就是线程安全的,看了这篇文章之后我突然不知道怎么写出真正的线程安全的类了。

10.c代码优化方案:点击打开链接,虽然是c的但是对c++同样适用。

11.gdb调试程序1和2:点击打开链接点击打开链接

12.C/C++ Volatile关键词深度剖析:点击打开链接 。有助于我们比较深入的了解Volatile的作用。

13.c++11并发编程指南点击打开链接,c++11中弥补了c++对于多线程支持不足的缺点,我们也可以摆脱直接调用系统的线程函数,并且增加了许多新的并发操作,比如异步调用,原子操作等等,这些都有助于我们写出更加高效的c++代码。

14.关于浅拷贝,深拷贝,Bitewise Copy和Memberwise Copy:点击打开链接,更加深入的了解不同情况下c++的拷贝构造函数的拷贝机制。

15.C++内存排查工具:点击打开链接,在我们的项目做的差不多的时候,我们最好用这类工具查一下内存管理问题,防止内存泄漏或者空指针等容易导致程序崩溃的问题。

16.C++多态的实现原理点击打开链接,这里主要讲c++的运行时多态

17.C语言中static的作用:static作用(修饰函数、局部变量、全局变量)static作用于c++类的时候作用很简单,但是c系的用法常常用来修饰作用用变量,这时候有很多注意的点容易被忽略。

18.C 语言中字符串常量的生命周期:点击打开链接 GCC会把字符串常量放到只读的.rodata段中,直到程序结束会释放。要特别注意不要试图修改字符串常量的内容否则会在运行时报段错误(如下)

char *str = "hello, world";
str[1] = 'a';

正确的写法

char str[] = "hello, world";
str[1] = 'a';

19.我自己的c++书籍阅读路线1 谭浩强版c语言 2朱战立数据结构 3:c++primer第五版  4:effective c++  5:c++面向对象高效编程  6:C++11新标准的并发和多线程编程深度指南 7:effective stl(没看完)7:提高c++性能的编程技术 除此之外还有一些与c++无关的tcp/ip详解,libevent源码详解,socket套结字编程等.如果要挑战智商可以看:深度探索c++对象模型,Imperfect C++中文版,c++模板编程,More+Exceptional+C+++中文版

   最后分享一下这些资料供大家下载:链接: https://pan.baidu.com/s/1iIB_NZKBikZtUb-JUAw-0A 密码: wty6

 

 

 

 

 

 

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值