将字符缓冲区传递给 std::string() 后是否需要释放它?

Do I need to free a character buffer after passing it to std::string()?

我是一名 java 程序员,刚开始 C/C++ 编程。我正在尝试从 char*

创建一个 std::string

这是我的字符缓冲区 -

char* token = (char*) malloc ((numberOfCharacters) * sizeof (char));

这就是我创建 std::string 对象的方式 -

std::string strKey (token); 

但是我需要在这个调用之后释放 'token' 还是 strKey 指的是令牌指向的字符缓冲区?

如果您不打算再使用 token,是的,您必须释放它。 String 的构造函数无法神奇地猜到你想释放它。

您还应该检查以确保 malloc() 成功; malloc() returns NULL 表示错误情况。

此外,sizeof(char) 始终为 1。

std::string 构造函数复制了 token,它并不拥有它的所有权。所以是的,你必须在构建 strKey.

之后 free()

无论如何,你应该在 C++ 代码中使用 newdelete 运算符:

char *token = new char[numberOfCharacters];

//...

std::string strKey(token);
delete[] token;

//...

不要使用 C mallocfree,除非您有特殊原因。

如果您有 malloc,则需要 free。如果将指针传递给 free ,它可以由另一个对象管理(请参阅 Stefano 评论)。但是在这里,由于你是自己管理指针,当你不再需要它时,你必须释放它。

并且在 C++ 中,如果不是被迫使用 malloc,则不应使用 malloc,malloc 更像是 C 的东西。