是否可以使用std :: map处理std :: ofstream?

时间:2016-10-16 16:37:31

标签: c++11 stdmap

Handling map of files in c++”说不,一个人应该使用std::map<std::string, std::ofstream*>,但这会导致newdelete行动,这不是那么整洁。

自“Is std::ofstream movable?是的!”并且可以“std::map<>::insert using non-copyable objects and uniform initialization”,是否可以使用ofstream处理std::map的集合?因此,人们不会担心关闭文件流,而delete会释放内存。

我可以在使用std::map<std::string, std::ofstream>时妥协,只创建,使用(写入)和关闭,而不是复制它。

1 个答案:

答案 0 :(得分:2)

是的,这是可能的。请参阅下面的示例代码。

  

我可以在使用std::map<std::string, std::ofstream>时妥协,只创建,使用(写入)和关闭,而不是复制它。

它们不可复制,因此在您的最终评论中,您是正确的,您将无法复制它。如果那是你想做的事情,你可以移动分配。

#include <iostream>
#include <fstream>
#include <map>

int main()
{
    std::map<std::string, std::ofstream> map;
    map.emplace("foo", std::ofstream("/tmp/foo"));
    map.emplace("bar", std::ofstream("/tmp/bar"));

    map["foo"] << "test";
    map["foo"].flush();

    std::ifstream ifs("/tmp/foo");
    std::string data;
    ifs >> data;

    std::cout << data << '\n';

    return 0;
}

<强>输出:

  

测试