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

C++ Immutability of classes and pros/cons

本文关键字:优缺点 不变性 C++      更新时间:2023-10-16

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

方法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++中创建这些不可变类的推荐或最常见的方法是什么?

在这种情况下

,您可以使构造函数私有时将不可变类设置为私有,您的派生类无法访问基类。像. 类externally_immutable { 私人: externally_immutable(const std::string & str) : str_(str){} 待办事项 常量字符串str_;};