【发布时间】:2014-08-01 20:20:59
【问题描述】:
编辑:一些变化,因为我认为存在一些误解。
假设我有一个 MainWindow 类作为我的程序 gui 的一部分。通过FileChooser 对话框,我想将图像文件加载到我的程序中。目前,我得到了所选文件的文件名,构造了一个 Image 对象,它隐藏了加载逻辑并希望将其存储为我的 MainWindow 类的一部分。我的问题是,您将如何存储该对象。我知道同时只有一个加载的图像,所以像std::vector 这样的容器格式的使用对我来说似乎不是很有用。
我的想法是:
- 使用非指针成员。但这很困难,因为我无法在 MainWindow 类的构造时构造 Image 对象。
-使用unique_ptr,因为我会说MainWindow 获得所有权时没问题,但我不确定当我必须传递指针时这是否非常有用(到可以显示的对象\小部件数据集的一些特定内容)。
-在这种情况下使用shared_ptr 以允许子小部件存储自己的指向Image 对象的指针
我知道这是一个“愚蠢”的问题,但我目前没有好主意。
【问题讨论】:
-
如果您需要共享数据集引用,那么您必须使用
shared_ptr,unique_ptr只有在对对象有单个引用时才有帮助。我没有得到带有矢量的部分,但你也可以有一个vector<shared_ptr<dataset>>。 -
数据集不应是 GUI 对象的成员。您的 GUI 应该与实际执行工作的代码分开。
-
大多数类都有一个默认构造函数,你通常可以想办法知道它是否被初始化。你的
Image班级不是这样吗?
标签: c++ c++11 shared-ptr member unique-ptr