『C++』Temp_2018_12_26_02
2024-08-24 22:08:41
#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 =
最新文章
- mtd零星记录
- Apache性能优化、超时设置,linux 重启apache
- mime类型表
- Dialog第三方登录等待
- 机器学习之AdaBoost
- Java基础学习中一些词语和语句的使用
- jquery精简选项卡
- jQuery 怎么实现文字显示2s,消失0.5s,再显示2s,再消失0.5s,以此循环
- 201521123104《Java程序设计》第1周学习总结
- 201521123027 <;java程序设计>;第11周学习总结
- OpenCV 实现颜色直方图
- Android相关面试题---面试官常问问题
- 写入Log错误日志
- pytorch使用总结
- CentOS7的内核优化
- 【Java集合系列一】ArrayList解析
- struts2 default.xml详解
- Android开发代码规范总结
- Unity系列文章
- Python获取二维数组的行列数
热门文章
- Java全系列帮助文档下载
- URL传递中文:Server.UrlEncode与Server.UrlDecode
- Flink Flow
- (MVVM) ListBox Binding 和 实时刷新
- visual studio code断点调试react
- ST&#160;Link&#160;调试问题总结
- 关于cn.jedisoft.framework.annotations 的增删改查
- C#MD5笔记
- layui 设计资源——2.0 版本的 Axure 组件包,产品交互设计利器
- Tomcat启动阻塞变慢