使用此指针在 c++ 中将对象写入二进制文件

Using this pointer to write object to binary file in c++

本文关键字:对象 二进制文件 c++ 指针      更新时间:2023-10-16
void Employee::store_data(string filename) {
fstream file;
file.open(filename,ios::app | ios::binary);
if (file) {
file.write((char*)&this,sizeof(this));
file.close();
}
else cout<<"n Error in Opening the file!";
}

这就是我尝试过的。 我想将员工类的当前对象以二进制模式存储到文件中。 但我明白这个

error: lvalue required as unary '&' operand
file.write((char*)&this,sizeof(this));
this

不是实际变量,因此您无法获取其地址。但它已经是一个指针,所以你不需要。它还有一个指针的大小,所以你的sizeof是错误的。然后在C++中,您不应该使用 C 样式转换。所以解决这 3 件事,你的线变成了

file.write(reinterpret_cast<char*>(this), sizeof(*this));

这应该编译。

但是,请注意,如果 Employee 包含任何复杂内容,例如std::string成员变量、指针成员变量、虚拟方法、构造函数/析构函数等,则无法读回数据。在这种情况下,该写入不会写入所有内容,或者写入错误的运行时值,并且您会返回垃圾。你进入可怕的未定义行为领域,任何事情都可能发生(包括测试时显然有效的事情(。

该语言不允许使用&this作为表达式,因为 (https://timsong-cpp.github.io/cppwp/n3337/class.this#1(

关键字this是一个 prvalue 表达式

您只能在左值表达式上使用addressof(&( 运算符。

更重要的是,您需要使用

file.write(reinterpret_cast<char const*>(this), sizeof(*this));

以保存对象。