C++:删除指向结构的指针

Eik*_*chu 1 c++ pointers

请考虑以下代码:

struct A {
    int someInt;
};

A *a = new A;
A *b;

delete a; // ok
delete b; // crash
Run Code Online (Sandbox Code Playgroud)

它崩溃了,但我不知道为什么.我认为删除空指针是一个无操作.

我甚至需要删除结构吗?在堆上创建结构是不好的做法吗?在堆栈上创建它们会更好吗?

Lig*_*ica 8

删除空指针一个无操作,是的,所以如果b是一个空指针那么你就没事了.

但事实并非如此.它是一个未初始化的变量,具有不确定的值.

这是一个空指针:

A* b = nullptr;
Run Code Online (Sandbox Code Playgroud)

(如果您A* b;在全局范围内编写,或者如果您static A* b;在函数中编写,或者您正在定义静态类成员,则b具有静态存储持续时间并自动为您进行零初始化;这是规则的一个例外.)

并且,是的,你应该尽可能避免动态分配 - 使用它没有充分的理由使你的代码变得复杂,好吧,没有充分的理由.