- 在和第三方的库进行交互时需要满足其内存布局,出于跨语言的原因,没有使用结构
int GetPvtLen(double* pIn, int length, double pStep, int pMode, int* resLength);
- 为了使用方便,自己对其进行按内存布局进行包装
- 取名,对变量取个友好的名字
- 数组,归类不要进行标号 v1,v2,v3...等
struct tracePoint
{
union
{
struct {
double x,y,z;
double vx,vy,vz;
double t;
};
double datas;
};
};
这样一来就有了结构
- 结构的数量不确定,所以需要从堆上进行动态分配
- 直接管理这些对象是很麻烦的
- 需要一个对象存储指针
- 需要管理内存的长度
- 定义一个对象来管理这一组对象
- size: 对象数量
- datas: 内存区
- 这样一来:
- 在构造、析构函数中可以进行内存管理,确保不会内存泄漏
- 资源分配也限制在管理对象中,不需要调用方管理 new/delete
- API调用中海油其他类型的OBJ,其内存布局不同的数据交互
- 将mgr改造为模板
template <typename T>
class xxxGroup
{
protected:
int mSize;
T *mDatas;
public:
void clear()
{
mSize = 0;
if ( NULL != mDatas )
{
delete []mDatas;
mDatas = NULL;
}
}
int size()
{ return mSize; }
T *data()
{ return mDatas; }
int alloc( int n )
{
Q_ASSERT( n > 0 );
mDatas = new T[ n ];
if ( NULL == mDatas )
{ return -1; }
mSize = n;
return 0;
}
public:
xxxGroup()
{
mSize = 0;
mDatas = NULL;
}
~xxxGroup()
{
clear();
}
};
网友评论