实现接口的常量方法和文件读取
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 赋值运算符中做一些事情,以获得这些情况的正确语义,相对于文件句柄)
我有一个接口,其中有一堆 const 方法。在接口的实现之一中,我需要从文件中读取请求的信息。正如所指出的,例如
我知道基本上有三种选择:
1) 对每个请求使用临时文件句柄。
2) 使用 PIMPL。
3) 在文件句柄上使用 mutable
。
第一个选项显然是矫枉过正,并且有很多请求会增加很多开销。第二个选项添加了间接但似乎是非常标准的解决方案。然而,第三个选项没有开销,也没有间接寻址,但它基本上是对更改的空白检查。再一次,尽管 PIMPL 习语以更复杂但可以说更受控制的方式做同样的事情。
在不影响 const 正确性的情况下,proper/preferred 在 const 方法中读取文件的方法是什么?
不要将文件句柄对象直接放在 class 中。
让您的 class 包含一个 std::shared_ptr
(与常规指针相反,以避免自己处理 RAII
),即使是 const 方法也可以使用它来读取来自.
(你 may/may 不必在你的 class 的复制构造函数 and/or 赋值运算符中做一些事情,以获得这些情况的正确语义,相对于文件句柄)