Rez*_*zie 0 c++ delete-operator
可能重复:
删除NULL指针是否安全?
在我的头文件中,我声明了一个类范围内的变量:
FaultModel<double> *fm_req_set_odom_px;
Run Code Online (Sandbox Code Playgroud)
...在类构造函数中有条件地初始化,具体取决于配置文件的值:
const char *configModel = ConfigReader->ReadString("FaultModel");
if (strcmp(configModel, "cyclic") == 0)
fm_req_set_odom_px = new CyclicFaultModel<double>();
Run Code Online (Sandbox Code Playgroud)
我的问题是:我是否需要用条件包装删除来检查模型是否已初始化,或者在任何一种情况下都可以安全删除它?
if (fm_req_set_odom_px != NULL) // Is this necessary?
delete fm_req_set_odom_px;
Run Code Online (Sandbox Code Playgroud)
除了适当指导您的其他答案,
如果你必须使用动态分配的对象,那么不要使用原始指针,而是使用智能指针.
始终使用RAII(SBRM)它可以让您的生活更轻松.这样您就不必费心明确地删除任何资源,资源本身也会处理它
delete NULL;保证是无操作,因此不需要手动检查.但是,单位化指针变量不是NULL,因此NULL如果条件失败,则必须将其显式设置为:
if (strcmp(configModel, "cyclic") == 0)
fm_req_set_odom_px = new CyclicFaultModel<double>();
else
fm_req_set_odom_px = NULL;
Run Code Online (Sandbox Code Playgroud)
或者,您可以NULL在if语句之前无条件地将指针变量设置为:
fm_req_set_odom_px = NULL;
if (strcmp(configModel, "cyclic") == 0)
fm_req_set_odom_px = new CyclicFaultModel<double>();
Run Code Online (Sandbox Code Playgroud)