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

C++: delete on pointers to structs

本文关键字:结构 指针 删除 C++      更新时间:2023-10-16

请考虑以下代码:

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是一个

未初始化的指针。没有什么可删除的。