提问人:Michael Rothkopf 提问时间:1/8/2021 更新时间:1/8/2021 访问量:190
写入文件时,C++ 将指针成员与类一起保存
C++ save pointer members with class when writing to file
问:
我在C++中有一个简单的二叉树实现。我通过 .std::ofstream::write((char*)&myTree, sizeof(mytree));
但是,由于类型不完整,该类是使用左节点和右节点的指针定义的。
class Node
{
public:
int value;
Node(int _value)
{
value = _value;
}
Node *left;
Node *right;
};
如何取消引用指针并将左节点和右节点与根节点一起保存在树中?
答:
2赞
Tumbleweed53
1/8/2021
#1
指针是指内存中的特定位置。它们无法保存到磁盘。当您启动一个新进程并读回它们时,进程的内存布局将有所不同。所以,你正在做的事情是行不通的。
你将不得不为你的类编写一个自定义序列化程序,以处理其结构。
boost::serialization 是一个不错的起点: https://www.boost.org/doc/libs/1_75_0/libs/serialization/doc/tutorial.html
还有麦片:https://uscilab.github.io/cereal/
正如另一位评论者所指出的,这是对 C++ 中序列化状态的方便总结:https://isocpp.org/wiki/faq/serialization
评论
std::ofstream::write((char*)&myTree, sizeof(mytree));.
你当然不能那样做。您将保存无意义的指针。您可能想在这里阅读: https://isocpp.org/wiki/faq/serialization