作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
<分区>
我在工作中讨论如何正确处理容器作为参数。
我们有一个接受容器参数的函数,并希望返回仅填充函数放入其中的内容的容器:
class bar;
void foo(std::vector<bar> &bars)
{
//do stuff that fills bars.
//exceptions may be thrown.
//we may also legally return early
return;
}
在讨论的一方面,有人说我们应该先 bars.clear()
然后再运行函数。
例如:
void foo(std::vector<bar> &bars)
{
bars.clear();
//do stuff that fills bars.
//exceptions may be thrown.
//we may also legally return early
return;
}
我自己的偏好是尝试尽可能接近强异常保证,这意味着创建一个本地容器,填充它并在返回之前交换,但否则保持 bars
不变。
例如:
void foo(std::vector<bar> &bars)
{
std::vector<bar> localBars;
//do stuff that fills localBars.
//exceptions may be thrown.
//we may also legally return early
if (returnEarly)
{
bars.swap(localBars);
return;
}
//do more stuff that may change localBars
bars.swap(localBars);
return;
}
第一个例子是“经典”方法;在做任何事情之前清除参数并从那里开始。
第二种方法,对我来说,建立了一个强大的异常保证(假设函数没有做任何其他事情可以改变内部状态),并避免了 clear() 调用。
选择一种方法相对于另一种方法有什么优点或缺点吗?
请注意,对于此功能,不需要强异常保证;如果该函数在参数中没有任何失败或它所做的任何其他事情在它到达异常处理程序时都会很重要。
在 Vaadin 7.0,显示时JavaBean Table 中的数据与 BeanContainer ,用新数据刷新表的正确方法是什么? 最佳答案 该表通过监听器监视表项的属性。如果您通过表的 Ite
首先,我使用的是带有 Axis2 1.6.2 的 eclipse,我正在 tomcat 6 上部署我创建的 Web 服务。Web 服务是在 eclipse 中通过自上而下的方法创建的。 我被要求使对我
我已将 Rails 3.1.1 应用程序升级到 Rails 3.1.3,现在,对于每个请求,它仅响应错误数量的参数(3 for 1)。不幸的是,它没有说明错误在哪里,并且应用程序跟踪为空。我认为存在一
我是一名优秀的程序员,十分优秀!