4

私は C++ スマート ポインターに非常に慣れていないため、関数の引数にスマート ポインターを使用することに関するこのアドバイスを理解するのに苦労しています。

「C++ Coding Standards: 101 Rules, Guidelines, and Best Practices」では、これらがスマート ポインターを渡す理由であると述べています。

(スマート) ポインターによる受け渡しを優先する

  • 引数がオプションの場合 (呼び出し元は null を「使用不可」または「無視」値として渡すことができます)
  • または、関数がポインターのコピーを格納する場合
  • または、引数の所有権を操作します。

誰かがそれらのそれぞれの例を教えてもらえますか?その場合、スマートポインターを使用しないのはなぜですか?

4

4 に答える 4

7

(スマート)ポインタを通過することを好む[いつ...]

コーディング標準を読み間違えていると思います。これを「これらがスマートポインタを使用する理由です」と読みます。著者が意図したのは、「これらは、オプションでスマートポインタである可能性があるある種のポインタを使用する理由です」です。

于 2012-10-01T20:35:11.807 に答える
4

(スマート)ポインターの通過を優先する

括弧内の「スマート」に注意してください。

ここでその人が話しているのは、ポインタと参照を渡すことです。スマートポインターを好むチームで作業する場合も同様のルールに従うため、括弧内にスマートがあります。

于 2012-10-01T20:35:27.663 に答える
2

この質問は、質問で引用されたテキストが説明しているものであるため、一般的なポインターに関連していると想定します。

スマート ポインター (または一般的な古き良きポインター) を使用する理由はいくつかあります。最初の最も明白な問題は、参照またはポインターによって何かを渡すときに、メモリ内のアイテムへのポインターを渡すことです。つまり、値渡しの場合のコピーではなく、実際のオブジェクトを取得します。これは、何らかの関数を使用してオブジェクトを操作したい場合や、単純にコピーを減らしたい場合に便利です (大きなテキスト ファイルを常に値として送信することを想像してみてください。これは確かに非効率的です!)。

次に、何かを null 値として渡す機会。これは基本的に、パラメーターが「存在しない」として渡され、ロジックで処理できることを意味します。たとえば、ファイル ポインタが null の場合、新しいファイルが作成されます。

特にスマート ポインターの場合: スマート ポインターは、追加の管理アルゴリズムがバックグラウンドで実行されるポインターです。これは、参照カウントまたはその他のオプションである可能性があります。たとえば、unique_pointer を使用して、オブジェクトへのポインターが常に 1 つだけ存在するようにすることができます。詳細については、ウィキペディアhttp://en.wikipedia.org/wiki/Smart_pointerを参照してください。

実際に質問が一般的なポインターの動作に関連している場合は、この紹介も参照してください http://www.tech-recipes.com/rx/1232/c-pointers-pass-by-value-pass-by-reference/

于 2012-10-01T20:38:53.840 に答える
1

スマート ポインターは、1 つの関数 (厳密には 1 つの関数) に対して存在します。

引数の所有権

スマート ポインターはこれを強制するため、手動で所有権を管理するのはばかばかしいほどエラーが発生しやすいため、コックアップしない可能性が高くなりますが、スマート ポインターは保証します。

通常のポインターではなくスマート ポインターを使用する正当な理由は他にありません。

于 2012-10-01T20:31:18.700 に答える