私は C++ の初心者で、職場でかなり大規模な C++ プロジェクトに取り組んでいます。ヒープ上でインスタンス化するオブジェクトのパラメータとしてダブル ポインターを受け取る関数がいくつかあることに気付きました。例:
int someFunc(MyClass** retObj) {
*retObj = new MyClass();
return 0;
}
このプロジェクトでは、なぜ単一のポインタではなく、常に二重ポインタが使用されるのかよくわかりません。これは主に、出力/戻りパラメータであるというセマンティックなヒントなのでしょうか、それとも私が気づいていない技術的な理由があるのでしょうか。
ベストアンサー1
ダブルポインタパターンは、新しく割り当てられたものMyClass
を呼び出し元に渡すために使用されます。例えば
MyClass* pValue;
someFunc(&pValue);
// pValue now contains the newly allocated MyClass
C++ ではパラメータが値で渡されるため、ここでは単一のポインタでは不十分です。したがって、単一のポインタの変更は 内からのみ表示されますsomeFunc
。
注: C++ を使用する場合は、このシナリオで参照を使用することを検討する必要があります。
int someFunc(MyClass*& retObj) {
retObj = new MyClass();
return 0;
}
MyClass* pValue;
someFunc(pValue);
これにより、値ではなく参照によって引数を渡すことができるようになります。したがって、結果は呼び出し側に表示されます。