#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
using namespace std; struct Person
{
int age;
int id;
}; template <class T> T myRead(void * memory)
{
char buffer[sizeof(T)];
memcpy(buffer, memory, sizeof(T));
T temp = *((T *)buffer); // 调用 Person 拷贝构造
return temp;
} template <class T> T myRead2(void * memory)
{
T temp;
memcpy(&temp, memory, sizeof(T));
return temp;
} template <class T> T* myRead3(void * memory, int offset)
{
T* temp = new T;
memcpy(temp, (char*)memory+offset, sizeof(T));
return temp; //返回指针, 有内存泄漏风险
} template <class T> void myRead4(void * memory, int offset, T* data)
{
memcpy(data, (char*)memory+offset, sizeof(T));
} template <class T> T* myRead5(void * memory, int offset)
{
T* t = (T*)((char*)memory+offset);
return t;
} int main()
{
char bytes[] = "\x05\x00\x00\x00\x0A\x00\x00\x00\x06\x00\x00\x00\x0C\x00\x00\x00";
Person p = myRead<Person>(bytes); // 调用 Person 拷贝构造
printf("age = %d, id = %d\n", p.age, p.id); Person p2 = myRead2<Person>(bytes); // 调用 Person 拷贝构造
printf("age = %d, id = %d\n", p2.age, p2.id); Person* p3 = myRead3<Person>(bytes, );
printf("age = %d, id = %d\n", p3->age, p3->id); Person* p4 = new Person;
myRead4<Person>(bytes, , p4);
printf("age = %d, id = %d\n", p4->age, p4->id); //这个会崩溃
//Person* p5 = NULL;
//myRead4<Person>(bytes, 7, p5);
//printf("age = %d, id = %d\n", p5->age, p5->id); Person* p6 = myRead5<Person>(bytes, );
printf("age = %d, id = %d\n", p6->age, p6->id); cin.get();
return ;
}

执行结果

 age = , id =
age = , id =
age = , id =
age = , id =
//程序崩溃
age = , id =

『C++』Temp_2018_12_26_02的更多相关文章

  1. 『AngularJS』$location 服务

    项目中关于 $location的用法 简介 $location服务解析在浏览器地址栏中的URL(基于window.location)并且让URL在你的应用中可用.改变在地址栏中的URL会作用到$loc ...

  2. [原创] 【2014.12.02更新网盘链接】基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装

    [原创] [2014.12.02更新网盘链接]基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装 joinlidong 发表于 2014-11-29 14:25:50 ...

  3. JS 中通过对象关联实现『继承』

    JS 中继承其实是种委托,而不是传统面向对象中的复制父类到子类,只是通过原型链将要做的事委托给父类. 下面介绍通过对象关联来实现『继承』的方法: Foo = { // 需要提供一个 init 方法来初 ...

  4. 『摄影欣赏』16幅 Romantic 风格照片欣赏【组图】

    今天,我们将继续分享人类情感的系列文章.爱是人类最重要的感觉,也可能是各种形式的艺术(电影,音乐,书,画等)最常表达的主题 .这里有40个最美丽的爱的照片,将激励和给你一个全新的视觉角度为这种情绪.我 ...

  5. 『开源』Slithice 2013 服务器集群 设计和源码

    相关介绍文章: <『设计』Slithice 分布式架构设计-支持一体式开发,分布式发布> <『集群』001 Slithice 服务器集群 概述> <『集群』002 Sli ...

  6. 『片段』OracleHelper (支持 多条SQL语句)

    C# 调用 Oracle 是如此尴尬 >System.Data.OracleClient.dll —— .Net 自带的 已经 过时作废. >要链接 Oracle 服务器,必须在 本机安装 ...

  7. 『设计』Laura.Compute 设计思路

    前言: 前一篇文章 <『开源』也顺手写一个 科学计算器:重磅开源> ,继 Laura.Compute 算法开源之后,有 博客园 园友 希望公开一下 Laura.Compute算法 的 设计 ...

  8. 『设计』Slithice 分布式架构设计-支持一体式开发,分布式发布

    项目原因: 参与过各种 分布式项目,有 Socket,Remoting,WCF,当然还有最常用的可以跨平台的 WebService. 分布式编码的时间浪费: 但是,无一例外的,开发分布式程序的开发遵循 ...

  9. 转:『代码』JS封装 Ajax级联下拉列表

    在博客园看到一篇不错的AJAX级联下拉列表,觉得不错,特地拿下来 :转载来自:『大雪无痕』 ,原文地址 //当一个 下拉列表 改变时,触发所有联动:(警告:各下拉列表之间 请不要出现 循环依赖) // ...

随机推荐

  1. vue-cli脚手架之其他文件解释

    好了,脚手架目录中重要的文件基本都介绍了,但还有一个不太注意到的文件没有解释,这里也说明一下. config文件夹下的index.js,作用是不同开发环境下的参数配置(可选项很多,生产环境.开发环境. ...

  2. [转]webapi部署在IIS7.5报404的解决方案

    1.iis 目录权限设置 2.转自:http://www.cnblogs.com/youlies/p/6042169.html 在web.config添加如下节点 <system.webServ ...

  3. npm全局安装失效修复

    一.windows下 先查看npm包的默认安装目录 npm config get prefix 修改配置 npm config set prefix "nodeJs的安装目录" 二 ...

  4. Hibernate (ORM)

    1 框架体系结构 2 hibernate入门 2.1 ORM框架 Hibernate是一个数据持久化层的ORM框架. Object:对象,java对象,此处特指JavaBean Relational: ...

  5. 多尺度几何分析(Ridgelet、Curvelet、Contourlet、Bandelet、Wedgelet、Beamlet)

    稀疏基的讨论已经持续了近一个月了,这次讨论多尺度几何分析.但由于下面讨论的这些变换主要面向图像,而本人现在主要关注于一维信号处理,所以就不对这些变换深入讨论了,这里仅从众参考文献中摘抄整理一些相关内容 ...

  6. BitmapFactory 读取图片方法总结

    ①decodeFile(java.lang.String pathName)     ②decodeResource(android.content.res.Resources res, int id ...

  7. androidtab

    https://github.com/H07000223/FlycoTabLayout tensorflow https://github.com/topics/tensorflow-examples ...

  8. mongo 聚合函数

    一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. <1> count count是最简单,最容易,也是最常用的聚合工 ...

  9. Mysql学习---视图/触发器/存储过程/函数/执行计划/sql优化 180101

    视图 视图: 视图是一个虚拟表(非真实存在),动态获取数据,仅仅能做查询操作 本质:[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用.由 ...

  10. DESCRIBE:When you mouse click right-side is open an application and click left-side is attribution.

    DESCRIBE:When  you mouse click right-side is open an application and click left-side is attribution. ...