如何解决我们可以存储类对象而不仅仅是指向该对象的指针吗
我试图将类对象存储在文件中,但是由于该类包含一个指针向量,这会造成麻烦,因为下次我访问该类时,我能够获取除该向量之外的所有内容。
typedef vector<pair<int,MBR *>> vppint;
class Node{
private:
int id;
int parentID;
int total_children;
MBR *mbr;
vppint children;
public:
vppint fetchChildren(){
return return this->children;
}
int totalChildren(){
return this->total_children;
}
};
MBR是某种课程。
将此Node类存储在文件中,然后读取它。 fetchChildren函数有明显的原因引发分段错误。有什么方法可以存储对象,而不仅仅是指针。
解决方法
在C ++中,如果您想创建/销毁类的实例,则可以使用构造函数和析构函数(我相信这些不是必需的,但可以帮助您了解其工作原理)。
您可以通过在节点类中声明一个公共构造函数来实现。然后声明该函数。 Node::Node() {}
,在我们的情况下为空。
class Node{
private:
int id;
int parentID;
int total_children;
MBR *mbr;
vppint children;
public:
Node();
vppint fetchChildren(){
return return this->children;
}
int totalChildren(){
return this->total_children;
}
};
当您有一个将初始化值的构造函数(或者如果您不想使用构造函数)时,您可以像这样简单地存储类对象:
Node savedObject = Node(); // Creates an instance of the Node class.
如果这是您想要实现的目标,建议您阅读以下内容:https://www.w3schools.com/cpp/cpp_constructors.asp,以获取更多信息。
,那是C ++。到现在为止,您必须编写自己的可正确处理指针的序列化逻辑。您可以看看boost::serialization
,它提供了许多帮助程序功能。请注意,boost::serialization
使您的序列化工具输出平台依赖。如果要跨平台序列化,则必须在串行化逻辑中付出更多努力,或者使用类似protobuf
的东西。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。