c++ - 如何查看共享指针是否彼此相等

标签 c++ pointers shared-ptr

我正在尝试用 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/

相关文章:

c++ - 打印抽象对象c++

c - 转发声明到指向结构的指针数组搞砸了?

c++ - 分配一个新构造的 shared_ptr

c++ - 存储 float 的最佳方式

c++ - 如何生成 C++ 动态对象名称?

c - 为什么指向结构的指针会使程序崩溃?

c++ - 使用 C++11 复制构造 boost::shared_ptr 时出错

具有 shared_ptr 成员的 C++ 复制构造函数

c++ - C++ 中的编译时断言?

c - 为了遍历数组,我们应该使用 size_t 还是 ptrdiff_t?