Glib::RefPtr は ' ' 経由での逆参照を許可しますが、' ->
' 経由では許可しません*
。どうしてこれなの?
もちろんできます:
class Foo {};
Glib::RefPtr<Foo> fooPtr;
fooPtr.operator->();
ドキュメントでは、特に operator*() を除外したと述べています。しかし、彼らはその理由について何のガイダンスも提供していません。
明確にするために例で編集:
RefPtr を「逆参照する必要は決してない」と主張しているのを見てきましたが、動的に割り当てられたオブジェクトとスタックに割り当てられたオブジェクトの両方で使用したい関数は最小公分母インターフェイス、つまりpass- 参照。
たとえば、次の例を見てください。
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 チームがこの立場を取っている理由を知っている人はいますか?