关于这个主题:What is the copy-and-swap idiom?
它声明一个类最多应该处理一个资源。资源是什么意思?
编辑:例如,我有一个处理每个监视器信息的类,并包含一个桌面像素数组。数组和只有数组会被视为资源吗?保持监视器信息和桌面数组的监视器数组是否会是另一个资源,需要另一个类?这是在另一个班级,但这是什么意思?
我在这里搜索了Google,但只找到了有关三个规则或资源文件(* .rc和MSDN)的更多信息。没有任何与定义相关的内容。
答案 0 :(得分:5)
这个问题一般是指C ++中的概念。在这种情况下,它还使用"资源"的一般概念:由外部源提供的对象,通常是外部的,代码块使用的对象。它与"资源相同"在现实生活中。
在复制和交换的情况下,它指的是您的C ++类所代表的内容。这个想法很简单:C ++类的每个实例都将提供对给定资源的访问。例如,让我们在磁盘上获取一个文件。资源是文件;操作系统提供对该文件的访问。您的C ++类将围绕操作系统的API调用来读取和写入该文件。
您链接的问题是询问如何将这些类与C ++的初始化规则混合在一起。您如何遵循这些规则将受到外部资源允许您使用的访问权限以及您个人需要执行的操作的影响。
当然,您的程序也可以拥有自己的资源。例如,将一种类型的枚举映射到另一种类型的枚举的全局数组可以是程序中的资源。所以答案是你的问题"我的计划应该是什么资源"是"它实际上取决于你编写程序的方式"。
Windows程序也有自己的资源",例如位图,图标,对话框控件布局,菜单布局,本地化字符串和其他内容。为了将这些东西嵌入到输出二进制文件中,Windows提供了自己的系统,并且还调用了所有这些"资源"。 .rc文件只是列出所有这些Windows资源的方式;你将它构建到Windows程序中。
GLib(GTK +建立在其上),Qt和各种Apple API都有自己的类似系统,每个系统都有"资源"在他们的名字。
(您可以编写C ++类来提供对所有这些特定资源的访问;在这种情况下,资源是资源。)
但是阅读时不要混淆特定技术(Windows资源)的一般术语("资源"),反之亦然,尤其是对于像资源这样的抽象概念。在继续编程之旅时请记住这一点。
答案 1 :(得分:1)
资源,例如: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
"上课,然后你失败了。不是每个人都有多个监视器,有些可能只有一个。