我知道有三种创建不可变对象的方法。
方法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 ++中创建这些不可变类的建议或最常用的方法是什么?
答案 0 :(得分:0)
如果你的构造函数是私有的,你可以创建不可变类,在这种情况下你的派生类不能访问基类。 像。 class external_immutable { 私人的 : external_immutable(const std :: string&amp; str) :str_(str){} // 去做 const string str_; };