free()
不接受它们,而delete
和delete[]
则接受,且const性质不会防止对象被销毁。我感兴趣的是你是否认为这样做是一个好习惯,而不是语言(C和C ++)允许什么。
指向const的删除的争论包括:
- Linus Torvalds的
kfree()
不像C的free()
那样,需要void const *
参数,因为他认为释放内存不会影响所指向的内容。 free()
在const关键字引入之前设计。- C ++的删除操作符允许删除const数据。
- 程序员不希望在将指向const的指针传递给它时修改(或删除)数据。
- 许多人认为指向const的指针意味着不获取数据的所有权(但非const则意味着获取所有权)。
- 这是大多数库和现有代码中看到的常见实践。
void FooBar(X*)
会承担所有权并释放对象。至于智能指针:如果只接受const指针,那么对可变对象使用智能指针会很棘手,不是吗? - visitor