`
javasee
  • 浏览: 960961 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

何为POD对象?

阅读更多

在C++中,我们把传统的C风格的struct叫做POD(Plain Old Data)对象。一般来说,POD对象应该满足如下特性。

对于POD类型T的对象,不管这个对象是否拥有类型T的有效值,如果将该对象的底层字节序列复制到一个字符数组(或者无符号字符数组)中,再将其复制回对象,那么该对象的值与原始值一样。

对于任意的POD类型T,如果两个T指针分别指向两个不同的对象obj1和obj2,如果用memcpy库函数把obj1的值复制到obj2,那么obj2将拥有与obj1相同的值。

简言之,针对POD对象,其二进制内容是可以随便复制的,在任何地方,只要其二进制内容在,就能还原出正确无误的POD对象。对于任何POD对象,都可以使用memset()函数或者其他类似的内存初始化函数。

现在动手

为了更好地理解POD对象的含义,我们体验一下如何采用memxxx()函数对POD对象进行存储与还原。

编写Win32控制台程序,主程序如下:

【程序 4-3】使用memxxx函数操作POD对象

  1. 01#include"stdafx.h"
  2. 02#include<cstring>
  3. 03
  4. 04//PERSON为POD
  5. 05structPERSON
  6. 06{
  7. 07char_name[16];
  8. 08int_age;
  9. 09bool_gender;
  10. 10};
  11. 11
  12. 12voidprint(PERSON*p)
  13. 13{
  14. 14printf("%s,%d,%s\r\n",p->_name,p->_age,(p->_gender?"男":"女"));
  15. 15}
  16. 16
  17. 17intmain()
  18. 18{
  19. 19//POD对象可以使用初始化列表
  20. 20PERSONp1={"佟湘玉",28,false};
  21. 21PERSONp3={"白展堂",26,true};
  22. 22print(&p1);
  23. 23print(&p3);
  24. 24
  25. 25//将p1转储为char数组
  26. 26charbytes[sizeof(PERSON)];
  27. 27memcpy(bytes,&p1,sizeof(PERSON));
  28. 28
  29. 29PERSONp2;
  30. 30memset(&p2,0,sizeof(PERSON));
  31. 31print(&p2);
  32. 32
  33. 33//将char数组还原为p2
  34. 34memcpy(&p2,bytes,sizeof(PERSON));
  35. 35print(&p2);
  36. 36
  37. 37//将p3复制至p2
  38. 38memcpy(&p2,&p3,sizeof(PERSON));
  39. 39print(&p2);
  40. 40
  41. 41return0;42}

结果输出如图4-5所示。

(点击查看大图)图4-5 运行结果
因此,对于POD对象,我们完全可以大胆地使用memxxx函数进行操作,从而完成对对象复制、赋值的目的。但是注意,对于多态类的对象,要慎重考虑使用memset,因为它会同时修改vtable指针!vtable指针是多态的根本所在,弄乱了对象的虚表指针,很有可能会酿成大错。

以上摘自《把脉VC++》第4.1.7 小节的内容,转载请注明出处。

如果你想与我交流,请点击如下链接加我为好友:http://student.csdn.net/invite.php?u=113292&c=8913f87cffe7d533

分享到:
评论

相关推荐

    何为机器视觉?机器视觉入门.pdf

    何为机器视觉?机器视觉入门.pdf

    何为机器视觉?机器视觉入门 20181126

    机器视觉是一种技术,它使计算机和自动化设备能够“看”并理解现实世界,进而执行基于图像的任务。在本文中,我们将深入探讨机器视觉的基本概念、组成部分、应用领域以及其在现代科技中的重要性。...

    汽车:欧洲系列4:欧洲电动车销量何为超预期?能否持续?.pdf

    本篇行业报告深入探讨了欧洲电动车销量增长的情况,并对其增长的可持续性进行了分析。报告首先指出,自2019年第四季度起,欧洲电动车市场进入加速放量阶段,销量显著增长,现阶段的销量增长仍主要受政策推动,但其...

    何为互联网运营?.doc

    运营的对象包括用户、产品和运营本身。用户是运营的核心,他们的需求驱动市场和产品的发展。产品是满足用户需求的载体,而运营则作为桥梁,连接用户与产品,传递产品价值,同时收集用户反馈以优化产品。 **Why:为...

    何为新闻文体?.zip

    新闻文体,顾名思义,是指在新闻报道和传播中所采用的一种特定的语言风格和表达方式。它具有明确的目的性和规范性,旨在清晰、准确、及时地传递信息,让读者迅速了解事件的核心内容。在互联网时代,新闻文体的特征与...

    汽车:欧洲系列4:欧洲电动车销量何为超预期?能否持续?.zip

    欧洲电动车市场的发展是全球汽车行业的重要关注点,尤其是在环保政策推动和消费者需求变化的双重影响下。本报告将探讨欧洲电动车销量为何超出预期以及这种趋势是否能够持续。 首先,欧洲电动车销量的增长得益于政府...

    RapidIO概述:何为RapidIO?它如何解决我的系统问题?.pdf

    ### RapidIO概述与关键技术知识点 #### 一、RapidIO技术简介 RapidIO是一种高性能的系统互连标准,主要用于嵌入式处理器、数字信号处理器(DSP)和网络处理器(NPU)之间的通信。该技术由RapidIO贸易协会制定并...

    电气自动化设备行业欧洲系列4:欧洲电动车销量何为超预期?能否持续?-0218-天风证券-34页.pdf

    【欧洲电动车销量超预期原因】 欧洲电动车销量在2019年第四季度开始加速放量,主要得益于以下几个因素: 1. **政策推动**:欧洲各国政府加大了对电动车的补贴力度,例如德国和法国提高了电动车购买补贴,使得电动...

    何为英雄?!英雄为何?!——读《水浒传》有感.doc

    《水浒传》是中国古典文学中的四大名著之一,作者施耐庵以其独特笔法描绘了一群豪杰聚义梁山的壮丽画卷,提出了何为英雄、英雄为何的深刻主题。通过对书中英雄人物的剖析,我们可以看到英雄的三个主要特质:兄弟义气...

    何为单片机烧写?这三种方式你pick哪种?

    早期一般是将调试好的单片机程序写入到 ROM、 EPROM 中,这种操作就像刻制光盘一样,实在高电压方式下写入,PROM 是性写入,存储内部发生变化,有些线路或元件就被烧断,不可再恢复,所以叫做烧写,EPROM 可以使用...

    何为HDMI?步入数字化需要知晓的点滴

    ### 何为HDMI?步入数字化需要知晓的点滴 #### HDMI概述 HDMI(High Definition Multimedia Interface,高清晰多媒体接口)是一种专为音频和视频信号传输设计的接口技术,被视为下一代音视频主流接口。它能够在...

    体系结构1-11次作业答案合集.rar

    1、何为抽象?抽象的意义是什么?试列举出计算机系统的抽象表现为哪些? SA思考题3 1、阅读软件架构师应该知道的97件事,选择3件印象最深的并写出感想。 SA思考题4 1、阅读材料“Software Architecture 4+1”,试给...

    高中历史之历史百科刘向荣:何为启蒙?素材

    高中历史之历史百科刘向荣:何为启蒙? 在这篇文章中,我们可以看到,刘向荣先生对启蒙的定义和解释。他认为,启蒙实质上就是理性精神的弘扬。这一点,我们可以通过康德的观点来加以理解。康德认为,启蒙就是人类对...

    网络存储:何为主流?

    网络存储技术的发展旨在满足日益增长的数据存储和访问需求,尤其是随着互联网和企业信息化的快速发展。在探讨主流的网络存储类型之前,我们先要理解RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)...

    何为捷径?文章-需求.docx

    在IT行业中,我们经常面临各种复杂的问题和挑战,而寻找捷径成为了许多从业者追求的目标。然而,正如数学老师、船夫和哲人的观点所揭示的,捷径并不总是直截了当的,它可能需要适应环境,需要持续的努力,而非单纯的...

    何为无极性电容?

    无极电容就是众多电容中的一种,根据电容的极性可以将电容分为无极性电容和有极性电容两种,而此篇文章我将给大家说说,何为无极性电容?它到底是干什么用的?无极性电容该如何选用?下面主要通过以上三个问题来给...

    Java语言程序设计基础课后复习题答案第十三章

    答:多态是指同一个消息可以被不同的对象所响应,对象可以根据自己的特征进行响应。 3.2 Java 中有哪些类型的多态?答:Java 中有两种类型的多态:编译时多态和运行时多态。 四、Java 中的接口 4.1 何为接口?答...

    Facebook手机意欲何为?.docx

    【Facebook手机意欲何为?】 Facebook作为全球最大的社交媒体网络,拥有庞大的用户基础,其推出手机的意图旨在进一步整合资源,强化自身平台的地位。在移动互联网时代,竞争的核心已不再是单一的产品或服务,而是...

    何为教师领导力?——分布式教育领导的启示.pdf

    【教师领导力】是教育领域中的一个重要概念,它指的是教师在教学过程中展现的影响力和领导才能,能够对学校环境、教学质量和学生发展产生积极影响。教师领导力并不仅仅是管理层的职责,而是所有教师都可以发挥的作用...

    Java面向对象编程思想

    以前总听老师说c语言是面向过程的,c++和java是面向对象的,这些糊涂老师却从来不说明何为面向过程,何为面向对象,搞得我一直对此稀里糊涂。 最近看了不少的资料,在这里总结一下对此的心得体会。 所有的计算机程序...

Global site tag (gtag.js) - Google Analytics