c++ - 哪个版本的 safe_delete 更好?

标签 c++ pointers c-preprocessor

#define SAFE_DELETE(a) if( (a) != NULL ) delete (a); (a) = NULL;

template<typename T> void safe_delete(T*& a) {
  delete a;
  a = NULL;
}

或者其他更好的方式

最佳答案

我不会说两者都不是,因为两者都会给您一种虚假的安全感。例如,假设您有一个函数:

void Func( SomePtr * p ) {
  // stuff
  SafeDelete( p );
}

您将 p 设置为 NULL,但函数外的 p 拷贝不受影响。

但是,如果您必须这样做,请使用模板 - 宏总是有可能影响其他名称。

关于c++ - 哪个版本的 safe_delete 更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/540920/

相关文章:

c++ - 在构造函数中创建的外部 vector

c++ - 如何正确使用remove_if?

c - memcpy/使用指针的链表的子列表

创建新数组 : Expression must have pointer to object type 时出现 C++ 错误

c++ - 返回 char 数组作为 std :string

c++ - 错误 LNK2019 未解析的外部符号 "public: __thiscall SLinkList<char>::SLinkList<char>(void)"

c - 使用计数变量偏移指向指针的指针

模拟默认定义的条件宏定义

c - 具有定义符号的 token 连接 C

c++ - 使用 %s 格式化时 # 的作用是什么