C++:删除指向结构的指针
C++: delete on pointers to structs
请考虑以下代码:
struct A {
int someInt;
};
A *a = new A;
A *b;
delete a; // ok
delete b; // crash
它崩溃了,但我不知道为什么。我认为删除空指针是没有操作的。
我甚至需要删除结构吗?在堆上创建结构是不好的做法吗?在堆栈上创建它们更好吗?
删除
空指针是没有操作的,是的,所以如果b
是空指针,那么你就没问题了。
但事实并非如此。它是一个具有不确定值的未初始化变量。
下面是一个空指针:
A* b = nullptr;
(如果在全局范围内写入A* b;
,或者在函数中写入static A* b;
,或者定义静态类成员,则b
具有静态存储持续时间,并且会自动为您初始化零;这是规则的一个例外。
而且,是的,你应该尽可能避免动态分配——无缘无故地使用它会使你的代码复杂化,嗯,没有充分的理由。
b
是一个未初始化的指针。没有什么可删除的。
相关文章:
- 如何在 C# 中映射双 C 结构指针?
- C++:映射结构中的结构指针
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- 类的静态结构指针声明在C++
- 在两个.cpp文件之间定义全局类/结构指针
- 返回对常量结构(指针类型)成员的引用:明显的左值到右值转换
- 是否可以将无符号字符数组reinterpret_cast到仅包含C++中无符号字符成员的结构指针
- 如何在地图中使用结构指针
- 结构指针在"新"调用上给出已分配的地址?
- 铸造结构指针指向C 的工会指针
- c++ 结构指针在初始化为 NULL 时无法读取内存
- 函数中的结构指针的地址为0x1
- C 用结构指针初始化结构
- C 结构指针铸成数组Interop C#
- 方法中不允许访问结构指针
- 如何打印出结构指针
- MPI_Op_create:候选功能不可行.自定义结构指针不能解释为空指针
- 尝试将结构指针传递给类时出错
- 初始化结构指针的值
- 使用 pybind11 将自定义结构(指针向量)从 C++ 传递到 python 的方法是什么?