我做了一个功能
size_t CalculusWizard::parseDouble(const std::string & str, std::string::const_iterator start, double & d)
用于各种用途。我目前的特殊用途只需要它的返回值,它完全不依赖于参数double & d
。所以我在我的代码中做的是创建一个变量dummy
,它只是一种形式:
double * dummy = new double;
if (parseDouble(fx, fx.begin(), *dummy) == fx.size())
fx = "c";
delete dummy;
这是我应该做的吗?关于如何更好地处理这种情况的任何建议?
感谢您抽出宝贵时间回答。
答案 0 :(得分:4)
您可以使用不同的参数集创建另一个parseDouble方法(即,不是double& d)。
另一个选择是使用外观设计模式,并将解析double的复杂任务留给私有方法,并创建一个方法子集,为您的每个需求接受适量的参数。
你也可以(正如之前的海报所说)使用默认值,虽然我个人不喜欢它们,因为它鼓励我使用“非标准行为”。
答案 1 :(得分:2)
如果你做的话会更整洁/更清洁:
double dummy = 0.0;
if (parseDouble(fx, fx.begin(), dummy) == fx.size())
fx = "c";
这样您就不必担心清理内存(如果parseDouble
会引发异常,那么您将泄漏为dummy
分配的内存)。< / p>
要在块结束之前删除dummy
,可以使用范围确定来执行此操作:
{ // Start new scope.
double dummy = 0.0;
if (parseDouble(fx, fx.begin(), dummy) == fx.size())
fx = "c";
} // dummy gets destroyed here.