C++ 関数の out/return パラメータにダブルポインタを使用するのはなぜですか? 質問する

C++ 関数の out/return パラメータにダブルポインタを使用するのはなぜですか? 質問する

私は 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);

これにより、値ではなく参照によって引数を渡すことができるようになります。したがって、結果は呼び出し側に表示されます。

おすすめ記事