请考虑以下代码:
struct A {
int someInt;
};
A *a = new A;
A *b;
delete a; // ok
delete b; // crash
Run Code Online (Sandbox Code Playgroud)
它崩溃了,但我不知道为什么.我认为删除空指针是一个无操作.
我甚至需要删除结构吗?在堆上创建结构是不好的做法吗?在堆栈上创建它们会更好吗?
删除空指针是一个无操作,是的,所以如果b是一个空指针那么你就没事了.
但事实并非如此.它是一个未初始化的变量,具有不确定的值.
这是一个空指针:
A* b = nullptr;
Run Code Online (Sandbox Code Playgroud)
(如果您A* b;在全局范围内编写,或者如果您static A* b;在函数中编写,或者您正在定义静态类成员,则b具有静态存储持续时间并自动为您进行零初始化;这是规则的一个例外.)
并且,是的,你应该尽可能避免动态分配 - 使用它没有充分的理由使你的代码变得复杂,好吧,没有充分的理由.
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |