C++学习心得:创建对象的三种方式

一、A a(1)

        栈中分配,隐式调用,栈中内存的分配和释放是由系统管理

二、A b = A(1)

         栈中分配,显式调用

三、A* c = new A(1)

        堆中分配,堆中内存的分配和释放必须由程序员手动释放。采用第三种方式时,必须注意一下几点问题:

  1. new创建类对象需要指针接收,一处初始化,多处使用
  2. new创建类对象使用完需delete销毁
  3. new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间
  4. new对象指针用途广泛,比如作为函数返回值、函数参数等
  5. 频繁调用场合并不适合new,就像new申请和释放内存一样

四、栈和堆的区别

  1. 栈的大小远小于堆的大
  2. 栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率 比较高
  3. 堆则是C/C++函数库提供的,它的机制是很复杂的,例如为了分配一块内存,库函数会按照一定的算法(具体的算法可以参考数据结构/操作系统)在 堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),就有可能调用系统功能去增加程序数据段的内存空间,这样就有机会 分 到足够大小的内存,然后进行返回。显然,堆的效率比栈要低得多
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本书以 Visual C++ 6.0为平台,结合 Visual C++ 6.0和MFC应用程序设计框架的最新规范,从基本的操作和技巧入手,以恰当的实例为导向,对实例代码进行层层图解的方式,由浅入深地介绍了 Visual C++开发的基本理论知识及 Visual C++应用系统开发的实践经验。全书一共用了 12章来全面讲解 Visual C++基本知识,内容包括 Visual C++ 6.0集成开发环境,基于MFC的应用程序框架,对话框和菜单的创建和使用方法,常用控件的使用方法,GDI对象以及文字操作的文本和字体类,多线程的基本概念和使用方法,动态连接库的使用和创建方法,ActiveX控件的创建和使用,网络编程的基本知识和基本步骤,数据库开发的常用基本技术等等,而且最后还安排了一章大型案例系统来整体介绍Visual C++的应用,使读者能够学以致用,加深对 Visual C++基本知识的理解。 本书适合于有 C++基础知识,但没有Visual C++编程经验的初学者,也可作为专业 VC开发程序员的参考书。 本书独一无二的优势 本书由具有多年开发和教学经验的资深老师执笔写作,笔者具有多年的 Visual C++开发和教学讲解经验,熟练掌握 Visual C++开发中的各种基本技能,笔者凭着娴熟的笔法和渊博的理论知识,在讲解时非常注重实践与理论的形象结合,为了能使读者通过读懂源代码来掌握Visual C++技术,在实例举证时还给源代码绘了大量的流程图,采取学习笔记的写作方式将 Visual C++开发技术展现得淋漓尽致,能使读者很快地进入实际开发角色。本书和市场上其他类似书籍相比,具有下面与众不同的特色:
《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。 目 录 第1部分C++ 多线程系统编程 第1章线程安全的对象生命期管理3 1.1当析构函数遇到多线程. . . . . . . . . . . . . . . . .. . . . . . . . . . . 3 1.1.1线程安全的定义. . . . . . . . . . . . . . . . .. . . . . . . . . . . 4 1.1.2MutexLock 与MutexLockGuard. . . . . . . . . . . . . . . . . . . . 4 1.1.3一个线程安全的Counter 示例.. . . . . . . . . . . . . . . . . . . 4 1.2对象创建很简单. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 5 1.3销毁太难. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 7 1.3.1mutex 不是办法. . . . . . . . . . . . . . . . . . . .. . . . . . . . 7 1.3.2作为数据成员的mutex 不能保护析构.. . . . . . . . . . . . . . 8 1.4线程安全的Observer 有多难.. . . . . . . . . . . . . . . . . . . . . . . . 8 1.5原始指针有何不妥. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 11 1.6神器shared_ptr/weak_ptr . . . . . . . . . .. . . . . . . . . . . . . . . . 13 1.7插曲:系统地避免各种指针错误. . . . . . . . . . . . . . . . .. . . . . . 14 1.8应用到Observer 上.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.9再论shared_ptr 的线程安全.. . . . . . . . . . . . . . . . . . . . . . . . 17 1.10shared_ptr 技术与陷阱. . . .. . . . . . . . . . . . . . . . . . . . . . . . 19 1.11对象池. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . 21 1.11.1enable_shared_from_this . . . . . . . . . . . . . . . . . . . . . . 23 1.11.2弱回调. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 24 1.12替代方案. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 26 1.13心得与小结. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 26 1.14Observer 之谬. . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 第2章线程同步精要 2.1互斥器(mutex). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.1.1只使用非递归的mutex . . . . . . . . . . . . . .. . . . . . . . . . 33 2.1.2死锁. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 35 2.2条件变量(condition variable). . . . . . . . . .

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值