C ++类的不变性和优点/缺点

时间:2016-03-08 06:36:28

标签: c++

我知道有三种创建不可变对象的方法。

方法1:内部和外部不可修改的内部不可变类成员。

#ifndef INTERNALLY_IMMUTABLE_HPP
#define INTERNALLY_IMMUTABLE_HPP

#include <string>

class internally_immutable
{
public:
    internally_immutable(const std::string & str)
    : str_(str)
    {
    }

    std::string get_str() const
    {
        return str_;
    }

private:
    const std::string str_;
};

#endif

方法2:外部不可变的类成员,外部不可修改。

#ifndef EXTERNALLY_IMMUTABLE_HPP
#define EXTERNALLY_IMMUTABLE_HPP

#include <string>
#include <vector>

class externally_immutable
{
public:
    externally_immutable(const std::string & str)
    : str_(str)
    {
    }

    std::string get_str() const
    {
        return str_;
    }

private:
    std::string str_;
};

#endif

方法3:输入不可变的,部分外部不可修改的,因为有人可以绕过你的typedef。

#ifndef TYPED_IMMUTABLE_HPP
#define TYPED_IMMUTABLE_HPP

#include <string>
#include <vector>

typedef const typed_mutable typed_immutable;

class typed_mutable
{
public:
    typed_mutable(const std::string & str)
    : str_(str),
    vec_()
    {
    }

    void set_str(const std::string & str)
    {
        str_ = str;
    }

    std::string get_str() const
    {
        return str_;
    }

private:
    std::string str_;
};

#endif

每种不可变类型的优缺点是什么?编译器优化,障碍,每种类型的使用......是否有其他方法在C ++中创建不可变对象?在C ++中创建这些不可变类的建议或最常用的方法是什么?

1 个答案:

答案 0 :(得分:0)

如果你的构造函数是私有的,你可以创建不可变类,在这种情况下你的派生类不能访问基类。 像。     class external_immutable     {     私人的 :     external_immutable(const std :: string&amp; str)     :str_(str){}     // 去做     const string str_; };

相关问题