实现接口的常量方法和文件读取

Implementing const methods of an interface and file reading

我有一个接口,其中有一堆 const 方法。在接口的实现之一中,我需要从文件中读取请求的信息。正如所指出的,例如 它实际上不是 const 操作,因为文件句柄随读取而变化。

我知道基本上有三种选择:

1) 对每个请求使用临时文件句柄。

2) 使用 PIMPL。

3) 在文件句柄上使用 mutable

第一个选项显然是矫枉过正,并且有很多请求会增加很多开销。第二个选项添加了间接但似乎是非常标准的解决方案。然而,第三个选项没有开销,也没有间接寻址,但它基本上是对更改的空白检查。再一次,尽管 PIMPL 习语以更复杂但可以说更受控制的方式做同样的事情。

在不影响 const 正确性的情况下,proper/preferred 在 const 方法中读取文件的方法是什么?

不要将文件句柄对象直接放在 class 中。

让您的 class 包含一个 std::shared_ptr(与常规指针相反,以避免自己处理 RAII),即使是 const 方法也可以使用它来读取来自.

(你 may/may 不必在你的 class 的复制构造函数 and/or 赋值运算符中做一些事情,以获得这些情况的正确语义,相对于文件句柄)