カイロを でラップしようとしていintrusive_ptr
ます。
Cairo のものにはすでに参照カウントがあるので、非常に単純なラップを書きました。
#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 );
コンパイラが正しい関数を見つけられなかった理由がわかりません。