为什么允许在C ++中使用指向const的指针释放内存?

时间:2011-05-12 06:43:54

标签: c++ pointers const

  

可能重复:
  Deleting a pointer to const (T const*)

让我们来看看这行代码:

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指针释放内存更自然。为什么没有这样的限制?

4 个答案:

答案 0 :(得分:3)

const T* p = new T();
// uh oh; how do I destroy the object pointed to by 'p'?

答案 1 :(得分:0)

如果你不能,你将无法写出如下内容:

const std::string name = "fred";

答案 2 :(得分:0)

更好的问题是为什么你不能解除分配?您要求限制,但该限制解决了什么问题。它真的对你的代码有帮助,还是只是妨碍你的代码呢?

const使您无法修改可能不应修改的数据。请记住,删除将消除内存。你的const指针仍然指向同一个地址,如果你试图修改删除后的数据,它仍然会抱怨。它取决于你没有指向已删除的内存。

您可以将其视为记忆的“视图”。可能有其他非const的视图。 delete对实际数据进行操作,而不是“视图”。

答案 3 :(得分:0)

由于您使用NEW分配内存,因此数据存储在HEAP区域中,因此您可以使用DELETE语句。 Y指向堆内存区域中的x。

(const char * y = x;这意味着你不能改变y的值,因为它被声明为常量。如果声明它:char * const y = x,你可以改变y的值而不是他的地址) 和平