gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:00:23 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

然后返回:

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

关于c++ - 将对象的地址复制到缓冲区并检索它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46169301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com