1. 如果使用自己生成的dll,则需要将其导出为lib, 对每个在外部需要调用的类,前面都要加上__declspec(dllexport), 可以用宏定义,比如:
#if defined(_MSC_VER)
#define RAW_DATA_EXPORT __declspec(dllexport)
#else /* compiler doesn't support __declspec() */
#define RAW_DATA_EXPORT
#endif
这样每个导出的类名字前面只需要加一个宏RAW_DATA_EXPORT 即可,如:
class RAW_DATA_EXPORT Pose{
};
2. new之后要判断申请内存是否成功。如:
SI_CHAR * pData = new SI_CHAR[uLen+1];
if (!pData) {
return SI_NOMEM;
}
3. 函数只执行一次或者线程退出
设置一个flag,这个flag初始化的时候设置为true, 第一次执行后置flase, 以后都会判断这个flag,为false就不会再执行。
退出线程也是判断flag,如:while(flag),只需将flag置flase即可退出。
4. 子类继承基类,类中包含对象,这两种情况需要在构造函数的初始化列表调用基类的构造函数,和所包含类对象的构造函数。
比如:
class CColisionGrid : public CDynamicGrid<TCollisionCell>
{
CParameterizedTrajectoryGenerator const * m_parent;
CColisionGrid(float x_min, float x_max,float y_min, float y_max, float resolution, CParameterizedTrajectoryGenerator* parent )
: CDynamicGrid<TCollisionCell>(x_min,x_max,y_min,y_max,resolution), m_parent(parent)
}