大佬教程收集整理的这篇文章主要介绍了c – 为什么我的结果数据返回为void *被破坏了?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用的遗留接口需要我将指向结果数据的指针作为void *传递,我想避免必须更改它.
示例中的unique_ptr只是用于演示,在我的实际代码库中,处理数据的所有内容都使用智能指针来管理内存.
我的问题是,结果数据被破坏了(参见最后一行/最后一次调用printPayload);最后一切都是0,但是转换到void *并且如第2和第3输出线所示返回似乎没有问题.
这是一个与临时相关的问题吗?
我不明白……
我希望这种问题对你们中的一些人有意义.
#include <iostream> #include <memory> struct Payload { long a; int b; int c; Payload() : a(),b(),c() {} Payload(long setA,int setB,int setC) : a(setA),b(setB),c(setC) {} }; void printPayload(const Payload& printThis) { std::cout << "payload -- a: " << printThis.a << " b: " << printThis.b << " c: " << printThis.c << std::endl; } void doSomething(Payload* sourceData,void* targetData) { if (!sourceData) return; std::unique_ptr<Payload> sourceDataUnique(sourceData); sourceDataUnique->a = 222; sourceDataUnique->b = 333; sourceDataUnique->c = 444; printPayload(*sourceDataUnique); targetData = reinterpret_cast<void*>(sourceDataUnique.release()); printPayload(*(reinterpret_cast<Payload*>(targetData))); } int main(void) { Payload* myPayload = new Payload(14,8,1982); Payload myResult; printPayload(*myPayload); doSomething(myPayload,&myResult); printPayload(myResult); }
输出:
payload -- a: 14 b: 8 c: 1982 payload -- a: 222 b: 333 c: 444 payload -- a: 222 b: 333 c: 444 payload -- a: 0 b: 0 c: 0
你永远不会真正分配给myResult.
以上是大佬教程为你收集整理的c – 为什么我的结果数据返回为void *被破坏了?全部内容,希望文章能够帮你解决c – 为什么我的结果数据返回为void *被破坏了?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。