C++ 在写入文件时用 class 保存指针成员
C++ save pointer members with class when writing to file
我在 C++ 中有一个简单的二叉树实现。我正在通过 std::ofstream::write((char*)&myTree, sizeof(mytree));
.
将其保存到文件中
但是class由于类型不全,定义了左右节点的指针
class Node
{
public:
int value;
Node(int _value)
{
value = _value;
}
Node *left;
Node *right;
};
如何解引用指针并保存左右节点与树中的根节点?
指针指向内存中的特定位置。它们不能持久保存到磁盘。当您启动一个新进程并将它们读回时,您的进程的内存布局将有所不同。所以,你所做的是行不通的。
您将不得不为您的 class 编写一个自定义序列化程序来处理它的结构。
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
我在 C++ 中有一个简单的二叉树实现。我正在通过 std::ofstream::write((char*)&myTree, sizeof(mytree));
.
但是class由于类型不全,定义了左右节点的指针
class Node
{
public:
int value;
Node(int _value)
{
value = _value;
}
Node *left;
Node *right;
};
如何解引用指针并保存左右节点与树中的根节点?
指针指向内存中的特定位置。它们不能持久保存到磁盘。当您启动一个新进程并将它们读回时,您的进程的内存布局将有所不同。所以,你所做的是行不通的。
您将不得不为您的 class 编写一个自定义序列化程序来处理它的结构。
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