【发布时间】:2014-02-10 17:00:00
【问题描述】:
我有一个带有指向基类对象的指针的向量,因此我可以管理从该类派生的对象。
vector <Product*> products;
我试图在遍历向量时将这些对象写入文件 但我不确定这是否正常工作。
void Inventory :: saveProductsToFile()
{
ofstream outfile;
outfile.open("inventory.dat",ios::binary);
list <Product*> :: iterator it;
for(it=products.begin(); it!=products.end(); it++)
outfile.write((char*)*(it),sizeof(Product));
}
文件已创建,但我不知道我是在保存实际对象本身还是它们 地址。这是正确的还是有其他方法?
文件是这样的:
ˆFG " H*c \Âõ(œ@@pFG h*c b'v b@
【问题讨论】:
-
你能告诉我们这个函数被调用后文件的样子吗?
-
派生类的大小可能不同,因此这不起作用。此外,如果有任何成员是动态分配的或包含动态分配的内存(例如
std::string),它也将不起作用。 -
改用
sizeof(*it);是的,正如 hmjd 提到的,如果您的类包含指针,则必须在序列化之前对其进行调整 -
是的,它确实有动态分配的成员!
-
@Paranaix
sizeof是一个常量表达式,它返回 static 类型的大小,因此sizeof(*it)和sizeof(Product)将计算出完全相同的值。
标签: c++ file pointers vector iterator