我知道有三种创建不可变对象(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/