cod*_*ver 2 c++ pointers smart-pointers shared-ptr c++11
以下代码工作正常:
std::map<std::string,std::ofstream*> m_jsTabFilesMap;
m_jsTabFilesMap.insert({ listOfTabNames[i], new std::ofstream(jsFilename)});
Run Code Online (Sandbox Code Playgroud)
但是如果我用共享指针替换普通指针,那么插入函数会抛出没有函数的重载版本insert()存在.
std::map<std::string, std::shared_ptr<std::ofstream>> m_jsTabFilesMap;
Run Code Online (Sandbox Code Playgroud)
我该如何解决 ?是否与我使用new实例化对象的方式有关.
的构造std::shared_ptr<T>,这需要T*IS explicit,并有很好的理由.传入原始指针时隐式创建拥有的智能指针会产生麻烦.
这意味着您必须更改插入函数的方式.为了保持异常安全,原始指针 - >智能指针转换通常应该一次发生一次,或者通过函数发生.在您的情况下,它可能是最好的使用std::make_shared:
std::map<std::string, std::shared_ptr<std::ofstream>> m_jsTabFilesMap;
m_jsTabFilesMap.insert({ listOfTabNames[i], std::make_shared<std::ofstream>(jsFilename)});
Run Code Online (Sandbox Code Playgroud)