Tim*_*Tim 7 c++ shared-ptr c++11
我在存储std::cout时遇到问题std::shared_ptr<std::ostream>.
因为这显然不应该这样做:
std::shared_ptr<std::ostream> p_cout(&std::cout);
Run Code Online (Sandbox Code Playgroud)
这甚至不可能,因为无法复制std :: ostream:
std::shared_ptr<std::ostream> p_cout = std::make_shared<std::ostream>(std::cout);
Run Code Online (Sandbox Code Playgroud)
有人知道法律解决方法吗?
Pau*_*lik 13
你要求很奇怪,但你当然可以存储指向std::ostream的shared_ptr<std::ostream>提供,你照顾一个适当的处置行动:,例如:std::shared_ptr<std::ostream>(&std::cout, [](void*) {});
sya*_*yam 10
显然不应该这样做:
std::shared_ptr<std::ostream> p_cout(&std::cout);
实际上,永远不应该这样做.原因是因为你没有所有权,std::cout因此当你的最后一次shared_ptr超出范围时它试图删除std::cout(这是一个简单的邪恶).但你已经知道了.
解决方案,如果您必须绝对使用shared_ptr(我假设是API兼容性问题),则使用不执行任何操作的自定义删除器:
shared_ptr<std::ostream> p_cout(&std::cout, [](std::ostream*){});
Run Code Online (Sandbox Code Playgroud)