Существует три способа создания неизменяемого объекта.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: тип неизменны, частично извне неизменяемым, а кто-то может обойти вашу ЬурейеЕ.
#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++?
Не имеет смысла возвращать значения 'const' из функций-членов. В любом случае это не влияет на изменчивость объекта, на который вызывается функция-член. – juanchopanza
@juanchopanza это может не иметь смысла с конечной точки пользователя, но как насчет конечной точки компиляции? –
Я не знаю, что значит иметь смысл «с точки зрения компиляции». – juanchopanza