Glib::RefPtr 允许通过 ' ->
' 而不是通过 ' *
' 取消引用。为什么是这样?
我当然可以:
class Foo {};
Glib::RefPtr<Foo> fooPtr;
fooPtr.operator->();
文档特别提到他们将 operator*() 排除在外。但他们没有就原因提供任何指导。
为了清楚起见,编辑了示例:
我已经看到它争辩说“你永远不需要取消引用”一个RefPtr ,但是 IMO 这似乎是违反直觉的,因为任何想要与动态和堆栈分配的对象一起使用的函数都需要最低公分母接口,即通过-引用。
举个例子:
struct Foo
{
void print() { printf( "Success" ); }
};
void myFunc( const Foo & foo ) { foo.print(); }
int main()
{
Foo foo0;
Glib::RefPtr<Foo> foo1Ptr( new Foo );
myFunc( foo0 );
myFunc( *foo1Ptr ); // error, no operator*()
return 0;
}
有人知道 Glib 团队为什么要担任这个职位吗?