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



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

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

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

  1. 如何防止客户端修改此设置。可以制作哪些不允许客户端执行此操作的类体系结构。

细节决定成败:他们希望您保留数据库 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();
.....
};

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

最新更新