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

方法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++中创建不可变对象(immutable对象)?在C++中创建这些不可变类的推荐或最常用的方法是什么?

最佳答案

您可以将不可变类设为何时将构造函数设为私有(private),在这种情况下,派生类将无法访问基类。
像。
类external_immutable
{
私有(private)的 :
externally_immutable(const std::string&str)
:str_(str){}
// 去做
const string str_;
};

关于c++ - 类和优点/缺点的C++不变性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35860633/

10-13 07:06