问题标签 [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.
c++ - C++ 是否有一个像 unique_ptr 这样的智能指针,它具有“构造前破坏”语义?
问题
考虑这个简单的类:
我想有一个指向这个类的实例的指针,它通常会被另一个实例替换。但是,我希望在创建新实例之前销毁当前实例。
错误的例子
如果我unique_ptr
以正常方式使用 a ,这不起作用:
(不需要的)输出:
构建第一个
构建第二个
破坏第一个
破坏第二个
丑陋的例子
可以达到预期的效果如下:
输出:
构建第一个
破坏第一个
构建第二个
破坏第二个
尝试的解决方案
这是我尝试创建具有这种行为的智能指针。这样的智能指针是否已经存在?
输出:
构建第一个
破坏第一个
构建第二个
破坏第二个
编辑:将“参数...”模板移至函数级别。
编辑 2:现在正确转发“参数”。
database - 网络信息系统中文化资源管理的最佳实践
我有一个关于资源管理的一般性问题。假设我想支持世界上所有的语言,并且我有用于此目的的资源文件。资源文件中的某些值替换了源自某些数据库(MySQL、SQL 服务器、PostgreSQL 等)的显示字符串数据。
现在,假设您有一个 jqGrid 表,该表对列进行排序,其值来自数据库,并替换为特定文化的资源文件。
当然,在那种文化中,排序可能(而且很可能)与英语(作为主要语言)产生不同的结果。
管理可能修改动态加载数据的值的资源的最佳实践是什么,它不会改变数据库例程?
(例如,我不希望从资源中动态替换字符串,然后对结果进行排序 - 这可能很耗时且处理成本太高)
scala - Iteratees 管理资源是否安全?
假设我正在阅读一个InputStream
.
我通常会怎么做:
无论是否doStuff
抛出异常,我们都会关闭InputStream
.
我将如何使用迭代器:
会InputStream
被关闭(即使doStuff
抛出异常)?
一个小测试:
我们只看到:
溪流从未关闭。替换1 / 0
为1 / 1
,您会看到流关闭。
当然,我可以保持对原始流的引用并在失败时关闭它,但 AFAIK 使用 iteratees 的想法是创建可组合的迭代而不必这样做。
这是预期的行为吗?
有没有办法使用迭代器,以便始终正确处理资源?
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
?
java - Java中流关闭模式的变体
在处理流时,我经常在 Java 文档和其他人的代码中看到以下模式:
但是我个人更喜欢不同的模式:
我喜欢后者的简洁,我认为这是正确的。但我对正确性的看法是对的吗?是否有客观的理由偏爱一个而不是另一个?
更新
即使我编写的示例几乎是如何在现实生活中编写这样的代码,我的模式仍然更加简洁。比较文档方法:
用我的方法:
我的短了一行!:D
fis.close()
有趣的是,如果您决定使用而不是IOUtils.closeQuietly()
“官方”代码将再增长 4 行,我的代码不会改变。
scala - 用于“使用/尝试使用资源”的简单 Scala 模式(自动资源管理)
C#有using
带IDisposable
接口。Java 7+ 具有与接口相同try
的功能AutoCloseable
。Scala 允许您选择自己的实现来解决这个问题。
scala-arm 似乎是流行的选择,由 Typesafe 的一名员工维护。但是,对于这样一个简单的行为,它似乎非常复杂。澄清一下,使用说明很简单,但了解所有代码在内部是如何工作的却相当复杂。
我刚刚写了以下超级简单的ARM解决方案:
- 像简单手臂这样的东西有什么好处吗?似乎所有额外的复杂性都应该带来额外的好处。
- 通常,最好使用其他人支持的公共开源库来实现通用行为,而不是使用自定义代码。
- 任何人都可以推荐任何改进吗?
- 这种简单的方法有什么限制吗?
c++ - C++ 隐式转换的危险
我正在编写一些托管句柄容器,与std::unique_pointer
(尽管我还没有在 C++11 中编写我的代码)不同。我有这样的事情:
可能还有很多其他运算符,但让我们保持简单。现在让我们假设:
我试过在ideone上运行它,它按预期工作。但是,在 Visual Studio (2008) 中,mixed_case
不需要转换h
为 bareHANDLE
而是隐式转换unmanaged
为UniqueHandle<HANDLE>
,这会导致它在不久之后被删除。我花了一些时间才找到这个错误,我知道可以通过将第一个构造函数声明为explicit
.
我的问题是:operator =
同样危险吗?使用这些类型的独特资源管理器还会遇到哪些其他危险?
project-management - MS Project - 将多个相同资源添加到多个并发任务
我目前正在 MS Project 中开展一个项目,除了资源之外,我还涵盖了大多数方面。我想将同一资源的多个版本(在本例中为普通员工)添加到某些任务中。我也有这些普通员工也将处理的并发任务,但我不希望这计入总资源数。简而言之,我想在共享资源的 3 个并发任务上多次使用相同的资源。这在 MS Project 2013 中是否可行?
以下是希望对您有所帮助的上下文:我目前正在开展一个项目来建立一个会议。我有大约 10 名员工,他们的工资相同(每小时美元)。我在会议期间有 3 个任务同时运行,如下所示;向顾客分发小册子,执行规则和规定,并在会议期间随时待命。我希望同样的 10 名员工同时完成所有 3 项任务,同时完成所有这些任务只获得一次报酬。有没有办法在 MS Project 中指定这个?我试过简单地将同一个员工资源对象多次分配给同一个任务,但它似乎不喜欢那样。我应该只创建 10 名普通员工(“员工 1”、“员工 2”等)并将他们分配给他们吗?如果是这样的话,
我希望我已经提供了足够的说明。
谢谢
mysql - 管理数据库和连接生命周期
在 Qt 中,需要完成几个步骤才能完成数据库访问。
第一步是按连接名称添加数据库:
在此之后,我可以使用open()
和close()
打开/关闭相应的连接。
也可以使用以下调用删除该数据库:
我的应用程序经常这样做,因为它出于多种目的访问并行进程中的各种数据库。它也是一个服务器应用程序,可以运行很长时间而无需重新启动。
对我来说很明显,由于可能的网络问题和服务器端的连接有限,始终保持连接打开是一个坏主意。
然而呢addDatabase()
?addDatabase()
在不直接调用removeDatabase()
(但仅在应用程序退出时)的情况下调用是否有任何危害或好处?还是始终直接配对这些呼叫更好?
c++ - 如何正确使用自定义 shared_ptr 删除器?
对于将自定义删除器与 shared_ptr 一起使用的正确方法,我仍然有点困惑。我有一个跟踪资源分配的 ResourceManager 类,我修改了它的接口,通过将 Release 方法设为私有,并通过 Allocate 方法返回 ResourceHolder 来支持使用资源的自动释放:
我实现的 ResourceHolder 类是这样的:
在我的清理方法中,我必须删除 T 吗?这样做总是安全的吗?
/li>如果 cleanup() 可以抛出异常会发生什么?在某些情况下我可以让它逃脱范围,还是应该总是阻止它?
我的 ResourceManager 不依赖于我正在使用的跟踪库,因此我选择了调用者可以通过其构造函数提供的回调,并将在 release 方法中调用该回调。所以我的 Release 看起来像这样:
/li>
这是一种合理的设计方法吗?