c++ - 如何防止客户端修改列表对象

标签 c++ architecture

我在一次公司笔试中遇到了这个问题。类是这样的:

class DB
{
ABC *list;
public:
ABC *getlist();
ABC *addlast();
ABC *remove(x);
ABC *freelist();
.....
}

现在的问题是首先找到客户端可以自行修改列表的任何实例。因此客户端可以通过 getlist 获取指针并使用它或使用 ABC 类 API 对其进行更多修改。

  1. 如何防止客户修改它。可以制作什么样的类架构,不允许客户端这样做。

最佳答案

细节决定成败:他们希望您保留 DB API 的哪些方面。

最简单的方法就是正确封装 list - 仍然使用你的伪代码风格......

class DB
{
    ABC list;  // I'd store by value unless there's a reason not to
  public:
    ABC getlist() const;           // only get a copy
    const ABC& getlistref() const; // another option...
    void addlast(x);
    void remove(x);
    void freelist();
.....
};

其他选项包括使用迭代器(即 beginend 函数)公开 list,或提供 visit(VisitorFunctor&) 函数让客户端代码对列表中的每个元素执行某些操作。

关于c++ - 如何防止客户端修改列表对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28313792/

相关文章:

java - 适合有抱负的 Java 技术架构师的好网站

c# - 新的 ASP.NET Web 应用程序的体系结构

c++ - 如何打印属于 map 的一系列元素 (std::pair<size_t, std::string>)(不是所有元素)

c++ - 对临时引用的 const 引用

c++ - 将像素数组保存到 jpeg 图像文件 C++

c# - 在不违反 SOLID 原则的情况下添加条件逻辑 C#

architecture - 有关 SOA 引用架构的问题

c++: 函数不能重载

c++ - 使用 cout 打印 unordered_map 迭代器

apache - nginx : Its Multithreaded but uses multiple processes?