是否建议将指向堆内存的指针声明为`const`总是?

iam*_*ind 10 c++ coding-style

T *p = new T();
Run Code Online (Sandbox Code Playgroud)

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

p++;  // (1) scope missed
p = new T(); // (2) re-assignment
Run Code Online (Sandbox Code Playgroud)

这会导致内存泄漏或因错误而崩溃delete.除了使用智能指针之外,建议总是将堆指针设为a const;

T* const p = new T();  // now "p" is not modifiable
Run Code Online (Sandbox Code Playgroud)

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

小智 7

好吧,我唯一一次使用原始堆指针就是编写自己的数据结构.如果你使用const指针,你的数据结构会立即变得无法分配.这可能是也可能不是你想要的.

  • 我说分配,而不是复制.你几乎肯定需要改变指针.我并没有在C++上下文中找到有用的术语深层和浅层副本. (2认同)

Joh*_*nck 2

我犹豫是否总是说,但你的建议对于许多/大多数情况来说似乎是合理的。大多数 C++ 人员在函数参数中相当关注 const 正确性,但在局部(甚至成员)变量中则不太关注。我们这样做可能会更好。