C++ 中的资源是什么?

What is a resource in C++?

关于这个主题:What is the copy-and-swap idiom?

它指出一个 class 最多应该处理一个资源。资源是什么意思?

编辑:例如,我有一个 class 来处理每台显示器的信息,并包含一个桌面像素数组。数组和只有数组会被视为资源吗?保存监视器信息的监视器阵列和桌面像素阵列是否需要另一个资源,这将需要另一个 class?它在另一个 class 中,但这是什么意思?

我在这里和 Google 进行了搜索,但只找到了与三规则或资源文件(*.rc 和 MSDN)相关的更多信息。与定义无关。

资源,比如:需要删除的raw pointers(这就是为什么我们有std::unique_ptrstd::shared_ptr这样的智能指针),需要正确关闭的文件(这就是为什么我们有 std::fstream), std::thread(来管理原始句柄,否则您必须在不同的操作系统中自己管理这些句柄)。 std::reference_wrapper 管理引用...等等。正如您可能已经注意到的那样,它们都管理一个资源,而不是更多。

我们的想法是您不希望单个 unique_ptr 为您管理 2 个指针。您将为每个原始指针创建两个 unique_ptr classes。

对于您编辑的具体问题,通常您想要做的是:

创建一个 class MonitorsManager 来管理所有监视器(这是他的任务)

创建一个 class MonitorInfo(管理单个监视器信息和像素

你会发现,如果你有一个好的设计,事情会变得更容易,因为将来你会希望能够轻松地编辑和更新那些 classes,如果你混合所有东西,它将会是真的很难,相信我。

此外,您的 MonitorInfo class 不应该对 MonitorsManager 有任何依赖,因为如果人们必须在他们的项目中包含 class "MonitorsManager"命令使用你的“MonitorInfo”class,那么你就失败了。不是每个人都有多个显示器,有些人可能只有一个。

这个问题一般指的是 C++ 中的概念。在这种情况下,它还使用了 "resource" 的一般概念:一个对象,通常是外部对象,由外部源提供,供一段代码使用。和现实生活中的"resource"一样。

在复制和交换的情况下,它指的是您的 C++ class 表示的内容。这个想法很简单:C++ class 的每个实例都将提供对给定资源的访问。例如,让我们在磁盘上获取一个文件。资源是文件;操作系统提供对该文件的访问。您的 C++ class 将环绕操作系统的 API 调用以读取和写入该文件。

您链接的问题是询问如何将这些 classes 与 C++ 的初始化规则混合。您如何遵守这些规则将取决于允许您使用的外部资源访问方式以及您个人需要做什么。

当然,你的程序也可以有自己的资源。例如,将一种类型的枚举映射到另一种类型的枚举的全局数组可能是您程序中的资源。所以你的 "what should be a resource in my program" 问题的答案是 "it really depends on how you wrote your program".


Windows 程序也有自己的 "resources",例如位图、图标、对话框控件布局、菜单布局、本地化字符串和其他内容。为了让这些东西嵌入到输出的二进制文件中,Windows 提供了自己的系统,也调用了所有这些 "resources"。 .rc 文件只是列出所有这些 Windows 资源的方式;你将它构建到你的 Windows 程序中。

GLib(GTK+ 建立在其之上)、Qt 和各种 Apple API 都有自己的类似系统,每个系统的名称中也有 "resource"。

(您也可以编写提供对所有这些特定资源的访问的 C++ classes;在这种情况下,资源 资源。)

但是在阅读时不要将通用术语 ("resource") 与特定技术(Windows 资源)混淆,反之亦然,这一点非常重要,尤其是对于资源这样的抽象概念.在继续编程之旅时请记住这一点。