我在一个开源项目中看到过这段代码:
void EXPORT_API ReleaseDracoData(DracoData **data_ptr) {
if (!data_ptr) {
return;
}
const DracoData *const data = *data_ptr;
switch (data->data_type) {
case draco::DataType::DT_INT8:
delete[] static_cast<int8_t *>(data->data);
break;
case draco::DataType::DT_UINT8:
delete[] static_cast<uint8_t *>(data->data);
break;
case draco::DataType::DT_INT16:
delete[] static_cast<int16_t *>(data->data);
break;
case draco::DataType::DT_UINT16:
delete[] static_cast<uint16_t *>(data->data);
break;
case draco::DataType::DT_INT32:
delete[] static_cast<int32_t *>(data->data);
break;
case draco::DataType::DT_UINT32:
delete[] static_cast<uint32_t *>(data->data);
break;
case draco::DataType::DT_FLOAT32:
delete[] static_cast<float *>(data->data);
break;
default:
break;
}
delete data;
*data_ptr = nullptr;
}
我想知道,既然这些只是基本的数字类型,不需要调用析构函数,我们可以避免进行切换吗?
void EXPORT_API ReleaseDracoData(DracoData **data_ptr) {
if (!data_ptr) {
return;
}
const DracoData *const data = *data_ptr;
delete[] static_cast<int8_t *>(data->data);
delete data;
*data_ptr = nullptr;
}