如何 delete/free 一个字符串文字?

How to delete/free a string literal?

我有一个 std::vector<const char*>,我用 .push_back("something") 填充了它。如何删除不包括std::string的header的内容? delete 段错误,并且 std::free 需要 void* 并且它“无法使用 'const char *' 类型的左值初始化 [..]”。

字符串文字具有静态存储持续时间。您不能使用 operator delete 删除它们。字符串文字将一直存在到程序结束,

您可以删除使用 operator new 创建的内容。

您可以只擦除矢量的所有或选定元素或完全清除它。

您可以 delete 只有您 new。您没有使用 new 来创建字符串文字,因此对它们使用 delete 将导致未定义的行为。不要那样做。同样,您可以 free 只有您 malloc 的内容(加上一些内部 malloc 的相关函数)。

字符串文字具有静态存储持续时间。这意味着它们的存储空间会在程序结束时自动释放,无需您的干预。

您可以使用 erase 成员函数从向量中删除指针。

"something" 这样的字符串文字存储在可执行文件的 read-only 段中。你不能 delete 他们。而且,修改它们是未定义的行为。