如何在c ++中控制对象的访问?

时间:2012-03-15 19:46:13

标签: c++ oop

想象一下,我有一个Device类。我不希望程序员能够实例化他自己的Device对象,所以现在我创建一个DeviceManager类。 DeviceManager是唯一将被实例化的实体,它通过让程序员指定某种ID来让程序员访问Device对象。这样,程序员只需要清理DeviceManager类,不会遗留任何杂散的Device对象。我主要关注的是如何控制对有利于垃圾收集的对象的访问。是一个“经理”模式,就像我在C ++中描述的好主意一样?谢谢!

2 个答案:

答案 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类)时或在调用方法来获取类的实例时阻止创建类的实例。如果类中的所有方法都是静态的,请考虑使整个类保持静态。