MSalter 的答案听起来很像正确的技术答案。幸好我不知道 SAL,所以我不能肯定,但它看起来像是技术层面的解决方案。
但是,我只是建议您重写当前的代码……
int Function(classA* pInput) {
if (pInput == NULL) {
classA::Create(pInput);
}
return pInput->value;
}
作为 …
int Function( classA* pInput ) {
if (pInput == NULL) {
pInput = classA::Create();
}
return pInput->value;
}
这里的主要问题是您是否泄漏了动态创建的对象。这在很大程度上取决于该Create
方法的作用。但它看起来确实像你在泄漏。
在这种情况下,Create
除了动态分配默认初始化的classA
对象之外什么都不做,那么您可以通过以下方式更安全、更有效地做到这一点:
int Function( classA* pInput ) {
if (pInput == NULL) {
return classA().value;
}
return pInput->value;
}
最后,为了彻底清理,考虑如何摆脱不必要的原始指针。因为原始指针会产生问题(您的代码只是其中的一个非常小的例子)。然后你可以做这样的事情:
int function( ClassA const& anObject = ClassA() )
{
return anObject.value;
}
本质上这是一个 C++ 级别的解决方案,而不是原始代码的 C 级别。因此,我还更改了命名约定,以反映对 C++ 级别的类型的更加关注。这里类型的首字母大写,纯函数首字母小写。
它更简单、更安全、更高效。
而且 – 在 C++ 级别,您通常不必为愚蠢的 SAL 表示法而苦恼。:-)
干杯&hth.,