c++中删除悬空指针
Delete dangling pointer in C++
此代码后_var2为Dangling pointer
int* _var = new int(102);
auto _var2 = _var;
delete _var;
必须删除_var2 (delete _var2
)吗?这是不可避免的吗?
不可以,因为它已经被删除了。
delete
关键字并没有真正删除指针,它删除了指向的值。在本例中,您在堆上第1行分配整数102,然后在第3行删除该整数。你的指针(_var
和_var2
)仍然保持整数是的地址,但它不再存在了。delete _var2
将是不正确的,因为没有在该地址分配任何内容。
我建议您使用from "std::tr1::shared_ptr"来管理资源。
在Scott Meyers第3章的"effective c++"中有关于它的有用信息。
通常情况下,您不需要这样做,因为it点已经被删除了。如果需要使用指针,最好在删除指针后将其设置为NULL:
int* _var = new int(102);
auto _var2 = _var;
...
if(!!_var)
{
delete _var;
_var = NULL;
}
相关文章:
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 运行时错误:引用绑定到类型为"int"的空指针
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 为什么我在空指针错误(链表)中获取成员访问权限
- 从向量到空指针的 memcpy(反之亦然)不起作用
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 成员访问是否在空指针上定义C++?
- 尝试将对象插入空指针数组时出现分段错误
- 为什么我们需要在 C++ 中检查空指针,而在 Java 中不需要?
- 是否允许向空指针添加零?
- 为什么 C 样式字符串的工作空指针检查不?
- 为什么 GCC 不优化删除 C++ 中的空指针?
- 删除C++中的空指针
- std::shared_ptr 在空指针上调用非默认删除程序
- 为什么C++中允许删除空指针
- 在删除之前清空指针是否会导致内存泄漏
- 对于空指针,删除程序的标准行为在 shared_ptr 和 unique_ptr 之间是否不同
- 在C++中删除一个空指针被认为是未定义的行为
- 如何删除空指针
- 为空指针指定原始类型后删除该指针