質問

C ++で書かれたAPIを調べていますが、次のパラメータータイプが何を意味するかについて混乱しています。

void*& data

それは、ユーザーがボイドポインターへの参照で渡すことを意味しますか?それが本当なら、ポイントは何ですか? void*はすでに間接的であるということです。なぜもう一度リダイレクトしたいのですか?

役に立ちましたか?

解決

それが使用されていないのを見ずに言うのは難しいですが、参照は間接のレベルであることを指摘します。それがポインターへのポインターだったら、あなたはそれが奇妙だと思いますか?それらは非常に一般的です - 実際、コマンドラインの引数を受け入れ、ポインターへのポインターを取得するときにそれらに対処します。別の例は、バケツを使用してハッシュマップを作成し、バケットを開始したポインターへのポインターを返すことができるようにしたい場合です。

ポイントは、時には複数のレベルの間接が必要なことです。ポインターと参照を混合することは風変わりである可能性があることは事実ですが、それには十分な理由があります。一般的な理由の1つは、C APIと相互作用するC ++コードの必要性です。多くのPOSIXシステム呼び出しには、渡されて変更されてから変更されるボイドポインターが必要であるため、問題のC ++関数はその周りのラッパーとして機能している可能性があります。

他のヒント

void * C ++でパスバイポインターを意味します。つまり、ポインターを渡すことを意味しますが、実際にはポインターのコピーです。アドレスを変更するなど、このポインターを機能に変更した場合、それはあなたが渡したポインターに反映されません。

それを参照によるパスと組み合わせて、 void *& この関数に対する元のポインターのエイリアスを渡すことを意味します。アドレスを変更するように変更した場合、元のポインターに反映されます。

ただし、ローカルボイドへの参照を返さないように注意してください*。このようなことをしないでください:

void*& f()
{
 int* a=new int(10);
 void* x=(void*)a;
 return x;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top