将对象的地址复制到缓冲区并检索它

时间:2017-09-12 06:24:05

标签: c++ pointers

我想将一个对象的地址复制到一个缓冲区,然后在其他地方将其强制转换回来。我无法做到。下面给出了示例代码。

 #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;
}

实际上,指针给出了不同的值,这是问题的根源。我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

您正在复制(指针大小的一部分)对象本身,而不是指针。你应该这样做:

memcpy(tmp, &myClass, sizeof(myClass));

然后回来:

MyClass *ptr;
memcpy(&ptr, tmp, sizeof(ptr));