Как вы можете контролировать доступ к объектам в C ++? - PullRequest
0 голосов
/ 15 марта 2012

Представьте, что у меня есть класс Device.Я не хочу, чтобы программист мог создавать свои собственные объекты Device, поэтому теперь я создаю класс DeviceManager.DeviceManager - единственный объект, который будет создан, и дает программисту доступ к объектам Device, если программист задает некоторый идентификатор.Таким образом, только класс DeviceManager должен быть очищен программистом, и не осталось никаких блуждающих объектов Device.Моя главная задача - как контролировать доступ к объектам в интересах тщательной сборки мусора.Является ли шаблон «менеджер», как я описал, хорошая идея в C ++?Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

Если вам это действительно нужно, да.

Чтобы добиться этого контроля, вы можете создать конструктор 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 ++ нет сборки мусора, но если вы используете умный указатель, вам не нужно беспокоиться об управлении памятью.

0 голосов
/ 16 марта 2012

Мы можем достичь этого, используя Private Constructor.Закрытый конструктор - это особый вид конструктора. Он обычно используется в классах, которые содержат только статические члены. Если у класса есть один или несколько закрытых конструкторов и нет открытых конструкторов, то другим классам не разрешается создавать экземпляры этого класса.Например,

class abc
{
private abc()
{}

}

Объявление пустого конструктора предотвращает автоматическую генерацию конструктора по умолчанию.Обратите внимание, что если вы не используете модификатор доступа с конструктором, он все равно будет закрытым по умолчанию.Однако частный модификатор обычно используется явно, чтобы прояснить, что экземпляр класса не может быть создан.

Закрытые конструкторы используются для предотвращения создания экземпляров класса, когда нет полей или методов экземпляра, таких каккласс Math, или когда вызывается метод для получения экземпляра класса.Если все методы в классе являются статическими, рассмотрите возможность сделать весь класс статическим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...