第六周工作报告

                                  第六周工作报告

        上周试图在libyamidecoder中添加MPEG2的解码器,跟导师作了一些交流后,参考之前添加进来的解码器的代码进行修改。但是苦于C++基础薄弱,虽然尝试着依样画葫芦地进行修改但是涉及到一些细节的地方还是不明所以。所以决定暂时先把修改代码的工作放一放。磨刀不误砍柴工嘛,与其在那里乱改到不如把基础的先学好。废话不多说,总结一下本周学习的内容。

       本周主要是看资料了,看的C++primer这本书,当然这本书讲的很详细。我也只是挑了一些项目中可能涉及到的知识点重点学习了一下。

        首先,之前跟导师沟通的时候有提到智能指针的概念。当时百度了一下,但是也没有深究。在看书的时候正好看到,于是重点看了一下。

        在C++中使用标准库能够大大减少现代C++程序中对指针的需要。然而,许多应用程序仍需要使用指针,特别是在类的实现中。包含指针的类需要特别注意复制控制,原因是复制指针时只复制指针中的地址,而不会复制指针指向的对象。设计具有指针成员的类时,类设计者必须首先需要决定的是该指针应提供什么行为。将一个指针复制到另一个指针时,两个指针指向同一个对象。当两个指针指向同一个对象的时候,可能使用任一个指针改变基础对象。类似地,很可能一个指针删除了一对象时,另一指针用户还认为基础对象仍然存在。

        指针成员默认具有与指针对象同样的行为。然而,通过不同的复制控制策略,可以为指针成员实现不同的行为。大多数C++类采用以下三种方法之一管理指针成员:

(1)指针成员采用常规指针型行为。这样的类具有指针的所有缺陷但无需特殊的复制控制。

(2)类可以实现所谓的“智能指针”行为。指针所指向的对象是共享的,但类能够防止垂直指针。

(3)类采取值型行为。指针所指向的对象是唯一的,由每个类对象独立管理。

         如果我们定义一个简单的类,保存一个指针和一个int值。其中指针成员的行为与其他任意指针完全相同。对该指针指向的对象所做的任意改变都将作用于共享对象。如果用户删除该对象,则类就有一个悬垂指针,指向一个不复存在的对象。

        智能指针的通用技术是采用一个使用计数。智能指针将一个计数器与类指向的对象相关联。使用计数器跟踪该类有多少个对象共享同一指针。使用计数为0时,删除对象,使用计数有时也称为引用计数。每次创建类的新对象时,初始化指针并将使用计数置为1。当对象作为另一个对象的副本而创建时,复制构造函数复制指针并增加与之相应的使用计数的值。对一个对象进行赋值时,赋值操作符减少左操作数所指对象的使用计数的值(如果使用计数减至0,则删除对象),并增加右操作数所指对象的使用计数的值。最后,调用析构函数时,析构函数减少使用计数的值,如果计数减至0,则删除基础对象。实现使用计数需要定义一个单独的具有以封装使用计数和相关指针。

        代码中还设计到虚函数的定义。C++中的函数调用默认不使用动态绑定。要触发动态绑定,必须满足两个条件:第一,只有指定为虚函数的成员函数才能进行动态绑定,成员函数默认为非虚函数,非虚函数不进行动态绑定;第二,必须通过基类类型的引用或指针进行函数调用。引用和指针的静态类型和动态类型可以不同,这是C++用以支持多态性的基石。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值