Неизменные классы в C++

В одном из моих проектов у меня есть некоторые классы, которые представляют объекты, которые не могут измениться когда-то созданный, иначе. неизменные классы.

Пример: класс 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++ или сделали я просто создал монстра?

Спасибо за Ваши советы!

6
задан ereOn 16 April 2010 в 07:24
поделиться

2 ответа

Мне нравится.

Маркировка каждого объекта const с завода позволяет избежать маркировки каждого члена данных const , но в этом примере в любом случае есть только один.

1
ответ дан 10 December 2019 в 00:35
поделиться

Это кажется излишним. Когда у вас есть только константные члены, объект все равно нельзя изменить. Если вы хотите запретить копирование, просто сделайте конструктор копирования и оператор присваивания закрытыми.

9
ответ дан 10 December 2019 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: