建议将指向堆内存的指针声明为`const`ALWAYS吗

Is it advisable to declare pointer to heap memory as `const` ALWAYS?

本文关键字:声明 const ALWAYS 指针 内存      更新时间:2023-10-16
T *p = new T();

对于堆上的指针,可能会有灾难性的操作,如

p++;  // (1) scope missed
p = new T(); // (2) re-assignment

这将导致内存泄漏或由于错误的delete而崩溃。除了使用智能指针之外,是否建议始终将堆指针设置为const

T* const p = new T();  // now "p" is not modifiable

这个问题是关于保持良好的编程实践和编码风格。

嗯,我使用原始堆指针的唯一时间是编写自己的数据结构。如果您为它们使用了const指针,那么您的数据结构将立即变为不可分配。这可能是你想要的,也可能不是你想要的。

我不太愿意说总是,但在许多/大多数情况下,您的建议似乎是合理的。构造正确性是大多数C++人员在函数参数中相当关注的问题,但在局部(甚至成员(变量中则不那么关注。我们最好这样做。

我看到了一个主要的潜在问题:

delete之后,您应该将指针设置为NULL,以(帮助(防止它在代码的其他部分中使用。

Const不会允许你这样做。

我认为,如果指针不会改变,那么使用它是不寻常的。也许是因为我在普通代码中几乎从未使用过new,而是依赖于容器类。

否则,通过尽可能使事物变常量来保持常量的正确性通常是个好主意。