gpt4 book ai didi

c++ - 为共享指针C++单独实例化一个对象

转载 作者:太空狗 更新时间:2023-10-29 23:49:10 27 4
gpt4 key购买 nike

下面的代码工作正常:

std::map<std::string,std::ofstream*> m_jsTabFilesMap;
m_jsTabFilesMap.insert({ listOfTabNames[i], new std::ofstream(jsFilename)});

但是如果我用共享指针替换普通指针,插入函数提示不存在函数 insert() 的重载版本。

std::map<std::string, std::shared_ptr<std::ofstream>> m_jsTabFilesMap;

我该如何解决这个问题?这与我使用 new 实例化对象的方式有关。

最佳答案

std::shared_ptr<T> 的构造函数这需要 T*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)});

关于c++ - 为共享指针C++单独实例化一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45757525/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com