我正在尝试用 C++ 实现享元设计。这是我目前所拥有的。
std::unordered_map<std::pair<Gdiplus::Color, float>, std::shared_ptr<Gdiplus::Pen>> mymap;
std::shared_ptr<Gdiplus::Pen> getPen(Gdiplus::Color const & color, float width )
{
std::pair<Gdiplus::Color,float> input;
input = std::make_pair(color, width);
std::unordered_map<std::pair<Gdiplus::Color, float>, std::shared_ptr<Gdiplus::Pen>>::const_iterator got = mymap.find (input);
if ( got == mymap.end() )
{
auto pen = std::make_shared<Gdiplus::Pen> ();
pen->SetColor(color);
pen->SetWidth(width);
//std::pair<Gdiplus::Color,float> input2;
mymap.insert(std::make_pair(input, pen));
return pen;
}
else
{
if (std::shared_ptr<Gdiplus::Pen> m_pen = got->second.get())
return m_Pen;
}
}
我的问题在 else 语句中。我试图弄清楚两个指针是否相同,但我收到一条错误消息
cannot convert from 'Gdiplus::Pen *' to 'std::tr1::shared_ptr<_Ty>'
最佳答案
你的问题在这一行:
std::shared_ptr<Gdiplus::Pen> m_pen = got->second.get();
解释:
std::shared_ptr<T>.get()
返回由 shared_ptr
存储的内部指针(即 Grdiplus::Pen*
)。试试这个:
std::shared_ptr<Gdiplus::Pen> m_pen = got->second;
这将允许您分配给 m_pen
,因为没有从 T*
的隐式转换至 std::shared_ptr<T>
.
关于c++ - 如何查看共享指针是否彼此相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15713114/