【发布时间】:2021-12-20 03:17:17
【问题描述】:
由于我是新手,我只是想问问更有经验的 C++ 程序员这是一个很好的 C++ 实践吗?我有一个返回*char 的函数。这个函数在dll中。
我已经定义了全局*char 变量,这就是返回的内容。我将 libcurl 用于 POST 请求方法。由于每个响应的长度不同,我使用的是new。在使用new的时候,也需要使用delete,我想检查一下我使用delete和pointer是否正确?
char *response
struct MemoryStruct {
char *memory;
size_t size;
};
char *function() {
//...
// libcurl code
//...
// is this part of a code a good practice?
if (response == nulptr) {
response = new char[cunk.size];
memcpy(response, chunk.memory, chunk.size);
} else {
delete[] response;
response = new char[chunk.size];
memcpy(response, chunk.memory, chunk.size);
}
//...
// libcurl cleanup
//...
return response;
}
这样可以吗,还是有其他(更好的)方法可以做到这一点?
感谢您的帮助。
编辑:我忘了提到结果不是返回给 C++,而是返回给 Clarion。所以我不能使用智能指针或字符串。
【问题讨论】:
-
“好的做法”是使用诸如
std::string之类的包装器来处理内存管理。为什么你需要使用原始的char*? -
您根本不需要
if。总是delete[] response;。可以delete[]一个空指针。 (但实际上,您应该使用std::unique_ptr。) -
response是一个全球性的没有明确的理由。从function()返回的值和response中存储的值似乎相同?其他代码可以查看其中一个而忽略另一个?
标签: c++