在 c++ 中返回指向值类型的指针是一种不好的做法吗?



我正在处理一个小的命令处理器项目,在实现参数列表时,我希望能够从一个方法返回nullptr,否则该方法将返回一个无符号的int。

我对C/C++思维方式相对较新(主要使用.NET,Java,Python和其他托管语言)

我想出了以下方法:

unsigned int* GetUnsigned(char* paramName, unsigned int* defaultValue = nullptr) {
std::string name(paramName);
if(this->Exists(name)) {
unsigned int tmp = (unsigned int)std::stoul(this->mParams[name], nullptr, 10);
unsigned int *value = (unsigned int*)malloc(sizeof(unsigned int));
memcpy(value, &tmp, sizeof(unsigned int));
return value;
}
return defaultValue;
}

它完成了工作,但对我来说似乎有点奇怪,仍然。

这被认为是一种不好的做法还是正确的做法?

正如科里和你们所有人所建议的那样:std::optional做到了。 另外,正如 m88 所建议的那样:我已经用.value_or(value)替换了我的第二个参数,如果列表中缺少给定的参数键,这将是默认返回值。

现在当前的实现如下所示:

std::optional<unsigned int> GetUnsigned(const char* paramName) {
if(this->Exists(paramName)) {
return (unsigned int)std::stoul(this->mParams[paramName], nullptr, 10);
}
return {}; // Returning an empty optional
}

用法如下:

void testFunc(CommandParameterList* params, ResponseBuilder* rbuilder) {
/* ... */
unsigned int value = params->GetUnsigned("Param2").value_or(100);
/* ... */
}

相关内容

  • 没有找到相关文章

最新更新