ere*_*eOn 6 c++ boost design-patterns class immutability
在我的一个项目中,我有一些类代表一旦创建就无法改变的实体,也就是说.不可变类.
示例:RSAKey表示仅具有const方法的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;
};
Run Code Online (Sandbox Code Playgroud)
所以你只能得到一个指针(好吧,一个智能指针)到一个const RSAKey.对我来说,这是有道理的,因为对实例的非const引用是无用的(它只有const方法).
你们看到有关这种模式的任何问题吗?不可变类在C++中是常见的,还是我创建了一个怪物?
谢谢你的建议!
这看起来有点矫枉过正.当您只有const成员时,无论如何都无法更改对象.如果要禁止复制,只需将复制构造函数和赋值运算符设为私有.