未能使用正确的函数boost intrusive_ptr

时间:2014-05-14 09:02:03

标签: c++ boost boost-smart-ptr

我正试图用intrusive_ptr包裹开罗。

由于开罗的事情已有引用计数,我写了一个非常简单的包装:

#include <boost/intrusive_ptr.hpp>
inline void intrusive_ptr_add_ref(cairo_surface_t* self)
{
    cairo_surface_reference(self);
}

inline void intrusive_ptr_release(cairo_surface_t* self)
{
    cairo_surface_destroy(self);
}

inline void intrusive_ptr_add_ref(cairo_t* self)
{
    cairo_reference(self);
}

inline void intruisve_ptr_release(cairo_t* self)
{
    cairo_destroy(self);
}

namespace XXX
{
typedef boost::intrusive_ptr<cairo_surface_t> CairoSurfacePtr;
typedef boost::intrusive_ptr<cairo_t> CairoPtr;
}

但是,当我尝试创建CairoPtr的实例时,似乎编译器使用cairo_surface_t的函数而不是cairo_t

/usr/include/boost/smart_ptr/intrusive_ptr.hpp: In instantiation of 'boost::intrusive_ptr<T>::~intrusive_ptr() [with T = _cairo]':
../GenoEyeCandy/genoeyewidget.cpp:12:18:   required from here
/usr/include/boost/smart_ptr/intrusive_ptr.hpp:97:49: error: cannot convert '_cairo*' to 'cairo_surface_t* {aka _cairo_surface*}' for argument '1' to 'void intrusive_ptr_release(cairo_surface_t*)'
         if( px != 0 ) intrusive_ptr_release( px );

我无法理解为什么编译器找不到正确的函数。

1 个答案:

答案 0 :(得分:0)

这是因为我错误地拼写了intruisve_ptr_release。因此,只有一个名为intrusive_ptr_release的函数,其参数类型为cairo_surface_t*

该死的......