В одном из моих проектов у меня есть несколько классов, которые представляют сущности, которые нельзя изменить после создания, иначе. неизменяемые классы.
Пример: класс RSAKey
, представляющий ключ RSA, который имеет только методы const. Нет смысла менять существующий экземпляр: если вам нужен другой, просто создайте его.
Мои объекты иногда тяжелые, и я принудительно использовал умные указатели, чтобы избежать копирования deep .
Пока у меня есть следующий шаблон для моих классов:
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. Для меня это имеет смысл, потому что неконстантная ссылка на экземпляр бесполезна (она имеет только методы const).
Ребята, вы видите какие-либо проблемы, связанные с этим паттерном? Являются ли неизменяемые классы чем-то распространенным в C ++ или я только что создал монстра?
Спасибо за советы!