通过指向const的指针释放内存是一个好习惯

Tro*_*nic 10 c c++ memory-management const-correctness

有许多问题讨论了处理指针到const删除的C和C++的细节,即free()不接受它们的那些deletedelete[]那样做,并且该const不会阻止对象破坏.

我感兴趣的是你是否认为这是一个好习惯,而不是语言(C和C++)允许的.

指针到const删除的参数包括:

  • kfree()与C's不同free(),Linus Torvalds 采取了一种void const*观点,因为他认为释放记忆不会影响指向的内容.
  • free() 是在引入const关键字之前设计的.
  • C++的删除操作符允许删除const数据.

反对它的论据包括:

  • 程序员在向指针传递指针时不希望修改(或删除)数据.
  • 许多人认为指针指向const意味着没有获得数据的所有权(但不是非const意味着获得所有权).
  • 这是大多数库和现有代码中常见的做法.

请在您的回复中充分说明,并可能参考当局.我的意图不是在这里开始民意调查.

mlv*_*ljr 2

好吧,这里有一些相关的内容可能太长,无法放入评论中:

  1. 不久前,通过指向常量的指针释放内存的做法是被明确禁止的,请参阅这位博士。Dobb 的文章,《语言法》(:)) 部分

  2. http://groups.google.ru/group/comp.lang.c++.moderated上已经有两次相关讨论:“删除 const 指针?” “为什么可以在 const 指针上调用删除操作符”(两者实际上都处理有问题的情况,即指向 const 的指针)。

  3. 我自己的观点(因为您正在询问参数):在任何给定上下文中相关操作的可能性是由类或函数的(在文档中显式或隐式定义的)契约定义的,而不仅仅是方法签名或参数类型。