我比较了这两个类,因为它们都与其他类相关联。 std::basic_fstream
必须与文件关联,而std::unique_lock
必须与互斥锁关联。因此,提供open()
方法似乎是合理的。尽管如此,std::unique_lock
还没有提供这样的方法。无论如何,通过移动分配可以执行延迟初始化。因此,提供open()
方法似乎是多余的。另一方面,std::basic_fstream
确实提供了open()
方法。 {C} 11之前存在std::basic_fstream
,它是执行延迟初始化的唯一方法。抛开向后兼容性考虑因素,std::basic_fstream::open()
只会被删除吗?或者它仍然需要在那里操作可能实际上失败?请注意,open(associate)操作始终与std::unique_lock
成功(不要与锁定操作混淆)。
答案 0 :(得分:1)
您的最后一句实际上包含一个提示:" open
(关联)操作始终以std::unique_lock
"成功。这样可以方便地将open-ness声明为类不变量,在构造函数中建立它并在罕见的失败时抛出异常。与文件相比:打开它们可以而且确实失败了,所以宣布开放性作为类不变量在那里也不起作用。