让我们来看看这行代码:
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指针释放内存更自然。为什么没有这样的限制?
答案 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的值而不是他的地址) 和平