将字符缓冲区传递给 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++ 代码中使用 new
和 delete
运算符:
char *token = new char[numberOfCharacters];
//...
std::string strKey(token);
delete[] token;
//...
不要使用 C malloc
和 free
,除非您有特殊原因。
如果您有 malloc
,则需要 free
。如果将指针传递给 free
,它可以由另一个对象管理(请参阅 Stefano 评论)。但是在这里,由于你是自己管理指针,当你不再需要它时,你必须释放它。
并且在 C++ 中,如果不是被迫使用 malloc,则不应使用 malloc,malloc 更像是 C 的东西。
我是一名 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++ 代码中使用 new
和 delete
运算符:
char *token = new char[numberOfCharacters];
//...
std::string strKey(token);
delete[] token;
//...
不要使用 C malloc
和 free
,除非您有特殊原因。
如果您有 malloc
,则需要 free
。如果将指针传递给 free
,它可以由另一个对象管理(请参阅 Stefano 评论)。但是在这里,由于你是自己管理指针,当你不再需要它时,你必须释放它。
并且在 C++ 中,如果不是被迫使用 malloc,则不应使用 malloc,malloc 更像是 C 的东西。