我想将一个对象的地址复制到一个缓冲区,然后在其他地方将其强制转换回来。我无法做到。下面给出了示例代码。
#include <iostream>
#include <cstring>
class MyClass
{
public:
MyClass(const int & i)
{
id = i;
}
~MyClass()
{
}
void print() const
{
std::cout<<" My id: "<<id<<std::endl;
}
private:
int id;
};
int main()
{
MyClass *myClass = new MyClass(10);
std::cout<<"myClass: "<<myClass<<std::endl;
myClass->print();
// Need to copy the address to a buffer and retrieve it later
char tmp[128];
// std::vector tmp(sizeof(myClass); // preferably, we may use this instead of the previous line, and use std::copy instead of memcpy
memcpy(tmp, myClass, sizeof(myClass));
// retreiving the pointer
MyClass* myClassPtr = (MyClass*) tmp;
std::cout<<"myClassPtr: "<<myClassPtr<<std::endl;
myClassPtr->print();
return 0;
}
实际上,指针给出了不同的值,这是问题的根源。我在这里做错了什么?
答案 0 :(得分:1)
您正在复制(指针大小的一部分)对象本身,而不是指针。你应该这样做:
memcpy(tmp, &myClass, sizeof(myClass));
然后回来:
MyClass *ptr;
memcpy(&ptr, tmp, sizeof(ptr));