问题标签 [resource-management]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
116 浏览

c++ - C++ 是否有一个像 unique_ptr 这样的智能指针,它具有“构造前破坏”语义?

问题

考虑这个简单的类:

我想有一个指向这个类的实例的指针,它通常会被另一个实例替换。但是,我希望在创建新实例之前销毁当前实例。

错误的例子

如果我unique_ptr以正常方式使用 a ,这不起作用:

(不需要的)输出:

构建第一个

构建第二个

破坏第一个

破坏第二个

丑陋的例子

可以达到预期的效果如下:

输出:

构建第一个

破坏第一个

构建第二个

破坏第二个

尝试的解决方案

这是我尝试创建具有这种行为的智能指针。这样的智能指针是否已经存在?

输出:

构建第一个

破坏第一个

构建第二个

破坏第二个

编辑:将“参数...”模板移至函数级别。

编辑 2:现在正确转发“参数”。

0 投票
1 回答
47 浏览

database - 网络信息系统中文化资源管理的最佳实践

我有一个关于资源管理的一般性问题。假设我想支持世界上所有的语言,并且我有用于此目的的资源文件。资源文件中的某些值替换了源自某些数据库(MySQL、SQL 服务器、PostgreSQL 等)的显示字符串数据。

现在,假设您有一个 jqGrid 表,该表对列进行排序,其值来自数据库,并替换为特定文化的资源文件。

当然,在那种文化中,排序可能(而且很可能)与英语(作为主要语言)产生不同的结果。

管理可能修改动态加载数据的值的资源的最佳实践是什么,它不会改变数据库例程?

(例如,我不希望从资源中动态替换字符串,然后对结果进行排序 - 这可能很耗时且处理成本太高)

0 投票
1 回答
206 浏览

scala - Iteratees 管理资源是否安全?

假设我正在阅读一个InputStream.

我通常会怎么做:

无论是否doStuff抛出异常,我们都会关闭InputStream.


我将如何使用迭代器:

InputStream被关闭(即使doStuff抛出异常)?

一个小测试:

我们只看到:

溪流从未关闭。替换1 / 01 / 1,您会看到流关闭。

当然,我可以保持对原始流的引用并在失败时关闭它,但 AFAIK 使用 iteratees 的想法是创建可组合的迭代而不必这样做。


  1. 这是预期的行为吗?

  2. 有没有办法使用迭代器,以便始终正确处理资源?

0 投票
1 回答
115 浏览

c++ - How to handle resource management with multiple inheritance?

Say I have a base class and some derived classes:

and somewhere to manage my derived objects:

I can do update:

finally I have to release the resources upon program exit:

The above scenario is fine, but the next is not:


The problem is when I add another base class and expand my derived classes:

NOTE: According to this answer: [Why should I avoid multiple inheritance in C++?, Point 3 and 4, my Base1 and Base2 are different concepts so the multiple inheritance should be fine here.

Also imagine there is a new Base2Manager, basically the same as Base1Manager.

Finally my question is, how to properly release the resources?

Apparently I can not do the release twice:

I have to choose only 1 manager and let it do the job, but these 2 managers are made separately and does not know each other, so what's the proper way to handle it?

Would smart pointer help? Should I add an API like addButNotRelase(Base2* p) so that I can manipulate p but not own p (like put p in a vector other than objs?

0 投票
3 回答
118 浏览

java - Java中流关闭模式的变体

在处理流时,我经常在 Java 文档和其他人的代码中看到以下模式:

但是我个人更喜欢不同的模式:

我喜欢后者的简洁,我认为这是正确的。但我对正确性的看法是对的吗?是否有客观的理由偏爱一个而不是另一个?

更新

即使我编写的示例几乎是如何在现实生活中编写这样的代码,我的模式仍然更加简洁。比较文档方法:

用我的方法:

我的短了一行!:D

fis.close()有趣的是,如果您决定使用而不是IOUtils.closeQuietly()“官方”代码将再增长 4 行,我的代码不会改变。

0 投票
9 回答
15807 浏览

scala - 用于“使用/尝试使用资源”的简单 Scala 模式(自动资源管理)

C#有usingIDisposable接口。Java 7+ 具有与接口相同try的功能AutoCloseable。Scala 允许您选择自己的实现来解决这个问题。

scala-arm 似乎是流行的选择,由 Typesafe 的一名员工维护。但是,对于这样一个简单的行为,它似乎非常复杂。澄清一下,使用说明很简单,但了解所有代码在内部是如何工作的却相当复杂。

我刚刚写了以下超级简单的ARM解决方案:

  • 像简单手臂这样的东西有什么好处吗?似乎所有额外的复杂性都应该带来额外的好处。
  • 通常,最好使用其他人支持的公共开源库来实现通用行为,而不是使用自定义代码。
  • 任何人都可以推荐任何改进吗?
  • 这种简单的方法有什么限制吗?
0 投票
0 回答
197 浏览

c++ - C++ 隐式转换的危险

我正在编写一些托管句柄容器,与std::unique_pointer(尽管我还没有在 C++11 中编写我的代码)不同。我有这样的事情:

可能还有很多其他运算符,但让我们保持简单。现在让我们假设:

我试过在ideone上运行它,它按预期工作。但是,在 Visual Studio (2008) 中,mixed_case不需要转换h为 bareHANDLE而是隐式转换unmanagedUniqueHandle<HANDLE>,这会导致它在不久之后被删除。我花了一些时间才找到这个错误,我知道可以通过将第一个构造函数声明为explicit.

我的问题是operator =同样危险吗?使用这些类型的独特资源管理器还会遇到哪些其他危险?

0 投票
1 回答
5435 浏览

project-management - MS Project - 将多个相同资源添加到多个并发任务

我目前正在 MS Project 中开展一个项目,除了资源之外,我还涵盖了大多数方面。我想将同一资源的多个版本(在本例中为普通员工)添加到某些任务中。我也有这些普通员工也将处理的并发任务,但我不希望这计入总资源数。简而言之,我想在共享资源的 3 个并发任务上多次使用相同的资源。这在 MS Project 2013 中是否可行?

以下是希望对您有所帮助的上下文:我目前正在开展一个项目来建立一个会议。我有大约 10 名员工,他们的工资相同(每小时美元)。我在会议期间有 3 个任务同时运行,如下所示;向顾客分发小册子,执行规则和规定,并在会议期间随时待命。我希望同样的 10 名员工同时完成所有 3 项任务,同时完成所有这些任务只获得一次报酬。有没有办法在 MS Project 中指定这个?我试过简单地将同一个员工资源对象多次分配给同一个任务,但它似乎不喜欢那样。我应该只创建 10 名普通员工(“员工 1”、“员工 2”等)并将他们分配给他们吗?如果是这样的话,

我希望我已经提供了足够的说明。

谢谢

0 投票
1 回答
423 浏览

mysql - 管理数据库和连接生命周期

在 Qt 中,需要完成几个步骤才能完成数据库访问。

第一步是按连接名称添加数据库:

在此之后,我可以使用open()close()打开/关闭相应的连接。

也可以使用以下调用删除该数据库:

我的应用程序经常这样做,因为它出于多种目的访问并行进程中的各种数据库。它也是一个服务器应用程序,可以运行很长时间而无需重新启动。

对我来说很明显,由于可能的网络问题和服务器端的连接有限,始终保持连接打开是一个坏主意。

然而呢addDatabase()addDatabase() 在不直接调用removeDatabase()(但仅在应用程序退出时)的情况下调用是否有任何危害或好处?还是始终直接配对这些呼叫更好?

0 投票
1 回答
893 浏览

c++ - 如何正确使用自定义 shared_ptr 删除器?

对于将自定义删除器与 shared_ptr 一起使用的正确方法,我仍然有点困惑。我有一个跟踪资源分配的 ResourceManager 类,我修改了它的接口,通过将 Release 方法设为私有,并通过 Allocate 方法返回 ResourceHolder 来支持使用资源的自动释放:

我实现的 ResourceHolder 类是这样的:

  1. 在我的清理方法中,我必须删除 T 吗?这样做总是安全的吗?

    /li>
  2. 如果 cleanup() 可以抛出异常会发生什么?在某些情况下我可以让它逃脱范围,还是应该总是阻止它?

  3. 我的 ResourceManager 不依赖于我正在使用的跟踪库,因此我选择了调用者可以通过其构造函数提供的回调,并将在 release 方法中调用该回调。所以我的 Release 看起来像这样:

    /li>

这是一种合理的设计方法吗?