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

时间:2015-02-04 04:57:31

标签: c++ architecture

我在公司笔试中遇到过这个问题。课程是这样的:

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

现在问题是首先找到客户端可以自己修改列表的任何实例。所以客户端可以通过getlist获取指针并使用它,或者使用ABC类API来修改它。

  1. 如何防止客户端修改此内容。可以制作哪种类架构,不允许客户端执行此操作。

1 个答案:

答案 0 :(得分: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();
.....
};

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