C++ 重新指定C样式字符串是否会导致内存泄漏?

C++ 重新指定C样式字符串是否会导致内存泄漏?,c++,c,string,C++,C,String,重新指定C样式字符串是否会导致内存泄漏?像这样: char * s = "Hello!"; s = "Hello, world!"; 我的问题可能看起来很愚蠢,但请容忍我;我现在仍然是C++中的哑谜。 在第二行代码中,C风格的字符串s较长,因此它是否在内部重新分配内存?这会导致内存泄漏吗?我需要打电话删除吗 谢谢没有动态内存分配,因此没有泄漏。您拥有的是一个指向字符串文本的指针,该字符串文本存储在实现定义的只读内存中。实际上,从技术上讲,没有。字符串文本提供了特殊的静态分配。看 是由动态内存分

重新指定C样式字符串是否会导致内存泄漏?像这样:

char * s = "Hello!";
s = "Hello, world!";
我的问题可能看起来很愚蠢,但请容忍我;我现在仍然是C++中的哑谜。 在第二行代码中,C风格的字符串
s
较长,因此它是否在内部重新分配内存?这会导致内存泄漏吗?我需要打电话删除吗


谢谢

没有动态内存分配,因此没有泄漏。您拥有的是一个指向字符串文本的指针,该字符串文本存储在实现定义的只读内存中。

实际上,从技术上讲,没有。字符串文本提供了特殊的静态分配。看

是由动态内存分配引起的

这里没有动态分配,因此没有内存泄漏

实际上,字符串文字具有静态存储持续时间。本标准规定(草案n3690):

3.7.1静态存储持续时间[basic.stc.Static]

所有没有动态存储持续时间、没有线程存储持续时间和非本地的变量都有静态存储持续时间这些实体的存储应在程序期间持续


您不能像那样重新分配char*。您分配的是指针,而不是实际值。而实际值是编译器生成的文本,因此不是堆分配的。@user2672165:可以。@user2672165,为什么不可以?它实际上应该是
const char*s=…
,因为字符串文本是指向不可修改(常量)内存的指针