void DeleteData()
{
memset(&Data, 0, sizeof(Data));
memset(&Data, 0, sizeof(Data));
}
在类中往往有结构体作为成员,当需要删除时,与系统其他结构往往不一样,这个代码是在结构体Data内都是系统自带类型时所用的方法,如果内部有更为复杂的结构体,需要计算长度是否设置合理。
如果在类中需要对成员中的结构体进行初始化,那么最为推荐的方法是列表式初始化。
AutoAlign::AutoAlign() :m_align_result(), m_option_coarse(), m_option_fine()
{
//改为列表初始化方式避免不成熟劣化
// m_align_result.is_converged = false;//AlignResult(): is_converged(false), num_iterators(0), mean_squared_error(0.0) {}
// m_align_result.num_iterators = 0;
// m_align_result.mean_squared_error = 0.0;
//
// m_option_coarse.dsm_method = DSM_VOXEL;//CoarseAlignOption() : dsm_method(DSM_VOXEL), dsm_scale(20), grid_size(0.5f), radius_feature_search(5), numk_feature_search(50),max_iterators(1000) {}
// m_option_coarse.dsm_scale = 20;
// m_option_coarse.grid_size = 0.5f;
// m_option_coarse.radius_feature_search = 5;
// m_option_coarse.numk_feature_search = 50;
// m_option_coarse.max_iterators = 1000;
//
// m_option_fine.dsm_method = DSM_VOXEL; //FineAlignOption() : dsm_method(DSM_VOXEL), dsm_scale(2), grid_size(0.5f), max_iterators(100), trans_epsilon(1e-8) {}
// m_option_fine.dsm_scale = 2;
// m_option_fine.grid_size = 0.5f;
// m_option_fine.max_iterators = 100;
// m_option_fine.trans_epsilon = 1e-8;
}
直接调用其内部的构造函数,而不是这种赋值法来进行初始化。
今天偶然还发现一个小错误。生成的临时变量int未进行初始化,加入vector并不报错。但是输出的结果会出现异常的大值。
所以初始化在C++中异常重要。