- 博客(7)
- 收藏
- 关注
原创 浅谈为什么有反码和补码
背景知识: 正数 的原码,反码和补码都一样 负数的反码为符号位不变,其余位取反 负数的补码为它的反码+1计算机只会加法不会减法,所以两个数的减法可以看成一个正数加一个负数,如果运算时将符号位和数据位隔开单独运算,运算规则是十分复杂的。为了让减法计算更简单我们希望在计算时连同符号位一起运算。于是便有了反码,比如下面的运算1-1=【00000001】+【1
2017-08-18 11:47:45 1660 1
原创 STL之vector那点事
1.resize和reserve的区别和联系 相同点:两者都只会让vector的capacity不减小,参数为newsize时,当newsize小于capacity时,调用后二者的capacity都不变 不同点:当newsize小于capacity时,调用后resize析构多余的元素并且改变size的大小个空间,并没有释放空间,只是没有 ;而re...
2017-08-15 10:20:46 473
原创 堆和栈的区别
1.申请方式:栈是由系统自动分配,堆是由程序员自己开辟,并指明大小2.申请后的响应:只要剩余的栈空间大于申请的大小,系统就会自动开辟,否则报错提示栈溢出。 操作系统会为空闲的堆内存维护一个链表,开辟的时候回遍历一次这个链表如果找到一个节点指向合适的内存大小,就会将这个节点删除并分配给程 序,另外会在这次分配内存的首地址处标记分配内存的大小,这样在delete的时候就会
2017-08-14 13:48:42 326
原创 详解如何定义一个只能在堆上/栈上生成的类
相信有很多同学和我一样都遇到过这个问题,而且都无处下手,在网上搜答案可能也看不太明白,今天重新回顾了一下这个知识点,感觉掌握起来其实不难,相信你看完这篇博客就能明白1.如何定义一个只能在堆上生成的类 首先我们要在堆上定义一个对象的时候一定要用new ,比如A *a=new A;C++会先在堆上malloc一块内存,然后执行构造函数。 相信有些人看
2017-08-09 21:16:37 736
原创 重载 & 隐藏 & 覆盖
重载:在同一个作用域。要求函数名相同,参数个数和参数类型不同,返回值可以相同隐藏:作用域不同,一个在父类,一个在子类只要求函数名相同,参数和返回值可同可不同在派生类中只要不是重写就是隐藏如果要用子类对象访问父类隐藏的函数必须加访问限定符覆盖(重写):作用域不同,一个在子类一个在父类基类的函数必须加virtual关键字函数名相同,参数列表相
2017-08-09 12:12:36 268
原创 浅拷贝&深拷贝的再次理解
以前对浅拷贝的认识不够,认为只是对指针的赋值,没有真实的开辟空间。看了一篇博客后感觉自己的认识还不够,其实浅拷贝还会导致内存泄漏!对,你没看错,确实是 内存泄漏!最后会把博客链接贴出来。我们以前对浅拷贝深拷贝的理解是这样的:浅拷贝是对指针的拷贝,拷贝以后两个指针指向的是同一块内存空间,深拷贝是另外开辟一块空间,两个指针指向不同的空间,当一个指针释放后,另一个指针照样可以使用。
2017-08-08 13:48:12 422
原创 智能指针
注意:智能指针不是指针,而是模板!auto_ptr 实现方式:权限转移 坚决不建议使用此模板scoped_ptr 实现方式:防拷贝,防赋值(将拷贝构造函数和operator=设为私有)shared_ptr 实现方式:引用计数 但是存在循环引用的问题,可能会造成内存泄漏解决方案:1.当剩下最后一个引用的时候,手动释放该对象2.当对象a的生存周期超过b的时候,将b
2017-08-08 12:17:11 283
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人