关于这个话题:什么是复制和交换成语?
它指出一个类最多应该处理一种资源。资源是什么意思?
编辑:例如,我有一个类处理每个监视器的信息,并包含一个桌面像素数组。数组并且只有数组会被视为资源吗?保存监视器信息的监视器阵列和桌面像素阵列是否是另一个资源,需要另一个类?它在另一个班级,但这是什么意思?
我在这里和谷歌搜索过,但只找到与三规则或资源文件(*.rc 和 MSDN)相关的更多信息。没有什么与定义有关。
关于这个话题:什么是复制和交换成语?
它指出一个类最多应该处理一种资源。资源是什么意思?
编辑:例如,我有一个类处理每个监视器的信息,并包含一个桌面像素数组。数组并且只有数组会被视为资源吗?保存监视器信息的监视器阵列和桌面像素阵列是否是另一个资源,需要另一个类?它在另一个班级,但这是什么意思?
我在这里和谷歌搜索过,但只找到与三规则或资源文件(*.rc 和 MSDN)相关的更多信息。没有什么与定义有关。
这个问题通常指的是 C++ 中的概念。在这种情况下,它也使用“资源”的一般概念:一个由外部源提供的对象,通常是外部的,代码块使用。它与现实生活中的“资源”相同。
在复制和交换的情况下,它指的是您的 C++ 类所代表的内容。这个想法很简单:C++ 类的每个实例都将提供对给定资源的访问。例如,让我们在磁盘上获取一个文件。资源就是文件;操作系统提供对该文件的访问。您的 C++ 类将围绕操作系统的 API 调用来读取和写入该文件。
您链接的问题是询问如何将这些类与 C++ 的初始化规则混合。您如何遵守这些规则将取决于您可以使用哪些外部资源访问以及您个人需要做什么。
当然,你的程序也可以有自己的资源。例如,将一种枚举类型映射到另一种枚举类型的全局数组可能是程序中的资源。因此,“我的程序中应该有什么资源”这个问题的答案是“这真的取决于你如何编写程序”。
Windows 程序也有自己的“资源”,例如位图、图标、对话框控件布局、菜单布局、本地化字符串和其他东西。为了让这些东西嵌入到输出二进制文件中,Windows 提供了自己的系统,并且还调用了所有这些“资源”。.rc 文件只是列出所有这些 Windows 资源的方式;您将其构建到您的 Windows 程序中。
GLib(GTK+ 建立在其之上)、Qt 和各种 Apple API 都有自己的类似系统,每个系统的名称中都包含“资源”。
(您也可以编写提供对所有这些特定资源的访问的 C++ 类;在这种情况下,资源就是资源。)
但是在阅读时不要混淆特定技术(Windows 资源)的通用术语(“资源”),反之亦然,尤其是对于资源这样的抽象概念,这一点非常重要。在继续您的编程之旅时请记住这一点。
资源,例如:raw pointers
需要删除的(这就是我们有像std::unique_ptr
,这样的智能指针的原因std::shared_ptr
)、需要正确关闭的文件(这就是我们有 的原因std::fstream
)、std::thread
(管理您必须自己管理的原始句柄在不同的操作系统中)。std::reference_wrapper
管理引用...等等。您可能已经注意到,它们都管理一个资源,而不是更多。
这个想法是您不希望一个unique_ptr
人为您管理 2 个指针。您将为每个原始指针创建两个unique_ptr
类。
对于您已编辑的特定问题,通常您想要做的是:
创建一个MonitorsManager
管理所有监视器的类(这是他的任务)
创建一个类MonitorInfo
(管理单个监视器信息和像素
如果你有一个好的设计,你会注意到事情会变得更容易,因为在未来你会希望能够轻松地编辑和更新这些类,如果你把所有的东西混合起来,那真的很难,相信我。
此外,你的MonitorInfo
类不应该有任何依赖,MonitorsManager
因为如果人们必须在他们的项目中包含类“MonitorsManager”才能使用你的“ MonitorInfo
”类,那么你就失败了。不是每个人都有多个显示器,有些人可能只有一个。