В одном из моих проектов у меня есть некоторые классы, которые представляют объекты, которые не могут измениться когда-то созданный, иначе. неизменные классы.
Пример: класс RSAKey
это представляет ключ RSA, который только имеет методы константы. Нет никакого смысла изменяющего существующий экземпляр: при необходимости в другом Вы просто создаете тот.
Мои объекты иногда тяжелы, и я осуществил использование интеллектуальных указателей для предотвращения глубокой копии.
До сих пор у меня есть следующий шаблон для моих классов:
class RSAKey : public boost::noncopyable, public boost::enable_shared_from_this<RSAKey>
{
public:
/**
* \brief Some factory.
* \param member A member value.
* \return An instance.
*/
static boost::shared_ptr<const RSAKey> createFromMember(int member);
/**
* \brief Get a member.
* \return The member.
*/
int getMember() const;
private:
/**
* \brief Constructor.
* \param member A member.
*/
RSAKey(int member);
/**
* \brief Member.
*/
const int m_member;
};
Таким образом, можно только получить указатель (хорошо, интеллектуальный указатель) к константе RSAKey. Мне это имеет смысл, потому что наличие ссылки неконстанты на экземпляр бесполезно (это только имеет методы константы).
Вы парни видят, что какая-либо проблема расценивает этот шаблон? Неизменные классы являются чем-то общим в C++ или сделали я просто создал монстра?
Спасибо за Ваши советы!
Мне нравится.
Маркировка каждого объекта const
с завода позволяет избежать маркировки каждого члена данных const
, но в этом примере в любом случае есть только один.
Это кажется излишним. Когда у вас есть только константные члены, объект все равно нельзя изменить. Если вы хотите запретить копирование, просто сделайте конструктор копирования и оператор присваивания закрытыми.