关于删除指针后使指针无效的争论
智能指针可以减轻开发人员对指针管理的担忧,但要了解手动删除指针的陷阱仍然至关重要。本题考察删除后将指针设置为 NULL 的做法及其潜在后果。
指针置空的论证
将指针设置为 0(在标准中解释为 NULL) C ) 旨在防止双重删除导致的崩溃。例如,如果指针(例如 foo)在删除相应对象后没有被取消,则后续的删除尝试将导致未定义的行为。空指针通过拦截第二次删除来避免这种情况。
考虑以下场景:
Foo* foo = 0; // Sets the pointer to 0 (C++ NULL) delete foo; // No action taken
与:
Foo* foo = new Foo(); delete foo; // Deletes the object delete foo; // Undefined behavior
反对空指针的反驳
指针无效的反对者认为它只是掩盖了双重删除错误,而不是解决它们。相反,他们强调完全避免双重删除的重要性。然而,在具有复杂所有权语义和对象生命周期的复杂代码库中,消除此类错误可能具有挑战性。
实际注意事项
虽然通常建议避免重复删除,删除后是否使指针无效的决定取决于上下文。当处理无法轻易消除的错误时,通过指针无效来掩盖它们可能是一个可行的选择。
智能指针替代方案
正如开场白中提到的, std::unique_ptr 和 std::shared_ptr 提供自动指针管理功能。通过采用这些智能指针,开发人员可以减轻与原始指针处理相关的风险,包括双重删除和其他与内存相关的问题。
以上是C 中删除后应该将指针置空吗?的详细内容。更多信息请关注PHP中文网其他相关文章!