将指针写入字符串,删除指针,并从字符串加载指针?
答案 0 :(得分:14)
可以进行这些操作,但它们(可能)之后不会产生影响。
将指针写入字符串只会存储指针值,即指向对象的地址。这是一个或多或少恒定长度的字符串,如0x7f2b93c91780(在64位系统上)。当然,这不会捕获任何实际对象的状态。
在指针上使用delete
时,指向的内存将返回给系统;它不再是你的了。指针本身不会被删除,操作只会影响指向的内存。此外,当您对其使用delete
时,指针的值实际上不会更改。因此,如果您现在通过从存储在其他地方的字符串中读取它来重新加载它没有区别:它仍然指向您不再拥有的内存,因此在不调用undefined behavior的情况下无法读取或写入。 / p>
就像PiotrLegnica建议的那样,你需要将整个对象序列化为一个字符串,然后从序列化版本重新创建对象(反序列化它)。
答案 1 :(得分:7)
这是可能的,但它不会做你认为它会做的事情。将整个对象保存为字符串称为序列化 - 如果需要,请参阅Boost.Serialization(或评论中建议的Protocol Buffers)。