<分区>
由于某些限制,我不得不为我的一个库使用 C float 组。该数组在经过一些处理后被 malloc。我将如何在 serialize()
方法中分配内存?
如果您将 malloc 从 init()
移动到构造函数,代码就可以工作。
#include <iostream>
#include <fstream>
#include <cstdlib>
#pragma warning(disable: 4244)
#include <boost/serialization/serialization.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
struct Monkey
{
int num = 256*70000;
float* arr;
Monkey()
{}
void init() {
arr = (float*)malloc(num*sizeof(float));//new float[num];
}
~Monkey() { free(arr); }
};
namespace boost
{
namespace serialization
{
template<class Archive>
void serialize(Archive & ar, Monkey& m, const unsigned int version)
{
ar & m.num;
ar & make_array<float>(m.arr, m.num);
}
}
}
int main(int argc, char* argv[])
{
const char* name = "monkey.txt";
{
Monkey m;
m.init();
std::ofstream outStream(name, std::ios::out | std::ios::binary | std::ios::trunc);
boost::archive::binary_oarchive oar(outStream);
oar << (m);
}
Monkey m;
std::ifstream inStream(name, std::ios::in | std::ios::binary);
boost::archive::binary_iarchive iar(inStream);
iar >> (m);
//std::copy(m.arr, m.arr + m.num, std::ostream_iterator<float>(std::cout, ";"));
std::cout << m.arr[10] << std::endl;
}
老实说,我不太了解 boost 序列化的幕后情况。这对我来说只是一个黑盒子。我是初学者,无法阅读其源代码。