写入文件时,C++ 将指针成员与类一起保存

C++ save pointer members with class when writing to file

提问人:Michael Rothkopf 提问时间:1/8/2021 更新时间:1/8/2021 访问量:190

问:

我在C++中有一个简单的二叉树实现。我通过 .std::ofstream::write((char*)&myTree, sizeof(mytree));

但是,由于类型不完整,该类是使用左节点和右节点的指针定义的。

class Node
{
public:
    int value;
    Node(int _value)
    {
        value = _value;
    }

    Node *left;
    Node *right;
};

如何取消引用指针并将左节点和右节点与根节点一起保存在树中?

C++ 指针 C++-标准库

评论

2赞 πάντα ῥεῖ 1/8/2021
对于序列化,您可以使用一些JSON或XML文件结构,这些文件结构允许以非常自然的方式保存树状结构。
1赞 drescherjm 1/8/2021
std::ofstream::write((char*)&myTree, sizeof(mytree));.你当然不能那样做。您将保存无意义的指针。您可能想在这里阅读: https://isocpp.org/wiki/faq/serialization

答:

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