想象一下,我有一个Device类。我不希望程序员能够实例化他自己的Device对象,所以现在我创建一个DeviceManager类。 DeviceManager是唯一将被实例化的实体,它通过让程序员指定某种ID来让程序员访问Device对象。这样,程序员只需要清理DeviceManager类,不会遗留任何杂散的Device对象。我主要关注的是如何控制对有利于垃圾收集的对象的访问。是一个“经理”模式,就像我在C ++中描述的好主意一样?谢谢!
答案 0 :(得分:2)
如果你真的需要它,是的。
要实现此控制,您可以在Device
类中创建private
DeviceManager
的构造函数并将Device
声明为受保护。
class Device
{
private: //not necessary, private by default
Device();
friend class DeviceManager;
};
class DeviceManager
{
public:
Device* getDevice();
};
您还可以返回指向Device
(推荐)的智能指针,并将创建的设备保留在DeviceManager
内,具体取决于您的需求。
这称为实例管理器模式。 DeviceManager
也是设备工厂。
此外,C ++没有垃圾收集,但如果你使用智能指针,你不必担心内存管理。
答案 1 :(得分:0)
我们可以通过使用Private Constructor来实现这一目标。 私有构造函数是一种特殊的构造函数。它通常用于仅包含静态成员的类。如果一个类有一个或多个私有构造函数而没有公共构造函数,则不允许其他类创建此类的实例。 例如
class abc
{
private abc()
{}
}
空构造函数的声明会阻止自动生成默认构造函数。请注意,如果您不对构造函数使用访问修饰符,则默认情况下它仍然是私有的。但是,私有修饰符通常用于明确表示无法实例化类。
私有构造函数用于在没有实例字段或方法(例如Math类)时或在调用方法来获取类的实例时阻止创建类的实例。如果类中的所有方法都是静态的,请考虑使整个类保持静态。