为什么允许在C++中使用指向 const 的指针来释放内存
Why is it allowed to deallocate memory using pointer to const in C++?
可能的重复项:
删除指向常量的指针 (T 常量*)
让我们看一下这几行代码:
char * x = new char [2];
x[0] = 'a'; // OK
x[1] = 'b'; // we can modify data using x
const char * y = x;
y[0] = 'c'; // Error
y[1] = 'd'; // we can't modify data using y
delete [] y; //but we can deallocate memory (i.e. delete data) using y
因此,在我看来,更自然的是限制无法使用 const 指针来释放内存。为什么没有这样的限制?
const T* p = new T();
// uh oh; how do I destroy the object pointed to by 'p'?
如果你不能,你将无法编写如下内容:
const std::string name = "fred";
一个更好的问题是为什么你不能解除分配? 您要求限制,但该限制解决了什么问题。 它真的对您的代码有帮助还是只是妨碍您?
const 可防止您修改可能不应该修改的数据。 请记住,删除将摆脱内存。 您的 const 指针仍将指向相同的地址,如果您尝试修改删除后的任何数据,它仍然会抱怨。 这取决于你不指向已删除的内存。
你可以把它看作是记忆的"视图"。 可能还有其他观点是不可思议的。 删除操作的是实际数据,而不是"视图"。
因为您使用 NEW 分配内存,因此数据存储在堆区域中,因此可以使用 DELETE 语句。Y 指向堆内存区域中的 x。
(常量字符 * y = x; 这意味着您无法更改 y 的值,因为 被声明为常量。如果声明:char *const y=x,您可以更改 y 的值,但不能更改他的地址)和平
相关文章:
- 将const指针(EVP_MD)保存到变量中,以将其重新使用为类方法(HMAC)
- std :: allocator_traits ::用const指针构造
- 汇编问题试图使用qobject_cast进行const指针
- C++ 两个具有相互指向 const 指针的对象
- 我想将指向 const 对象的指针放入包含非 const 指针的容器中.我有什么选择
- 传统代码突变const指针.任何合法的原因
- C#等效于C 中的const指针
- 返回指向 const 数据成员和 'auto' 关键字的 const 指针。有点困惑
- 函数返回由const指针向量生成的指针
- 您如何使用成员正确初始化构造的结构,该构件是指向const值的const指针
- 使用 const 指针的 C 样式字符返回不正确的结果
- 有没有办法将 std::stack<pointer> 转换为 std::stack<const 指针>?
- 为什么当 typedef const 指针与额外的 const 一起使用时,编译器不会给出错误?
- 如何将const_cast的const指针向量映射到非常量指针向量
- 什么场景可能需要使用 需要 const 指针指向(非常量常量)数据
- 强制转换 const 指针以使用旧版 C 代码
- const ref 和 const 指针 c++ 之间的区别
- 将 const 传递给接受 const 指针的函数是不正确的
- 指向指针数组的Const指针
- C++Const指针声明