2016-10-21 20 views
2

[]演算子または++を一意のポインタまたはshared_pointerで使用できますか?私たちは生のポインタのためにそれを使用するよう共有ポインタ[]演算子と++演算子

int * a = new int[10]; 
a[0] = 2; // We can use [] operator; 
  • スマートポインタのための同様の方法はありますか?

  • これはいつ使うべきですか?

  • それがない場合、なぜですか?
  • MultiDimensional Arrayでも可能ですか?
+0

http://www.cplusplus.com/reference/memory/unique_ptr/あなたがアレイ上shared_pointerを使用することができます 'shared_ptr' – PcAF

+0

について同じ操作を行います:' std :: shared_ptr > ' – dkg

答えて

4

両方std::unique_ptrstd::shared_ptrは、格納された配列へのインデックス付きアクセスするためoperator[]を提供します。あなたが管理しているものが配列のものであれば、それらを使うことができます。

operator[]は、unique_ptrで管理される配列の要素へのアクセスを提供します。

std::unique_ptr<int[]> a(new int[10]); 
a[0] = 2; // We can use [] operator; 

注意してくださいインデックスは、配列内の要素の数より小さくなければなりません。それ以外の場合、動作は未定義です。

残念ながらoperator++を直接使用することはできません。これは、smart pointersが行うべきものではなく、通常、ポインタの管理に使用されます。

配列を必要とする場合は、std::vectorまたはstd::arrayを使用することをおすすめします。

+0

未処理ポインタの場合と同じように、int []ではなくint []へのポインタです。また、++ opertatorを使用することもできますか? – Anshuman

+0

@Anshumanどのようなポインタを意味しましたか?それらは生ポインタとして同じヘヒーリを提供します。はい、直接演算子++を使用することはできません。それはスマートポインタがするはずのものではありません。 – songyuanyao

+0

ありがとう、MultiDimensional Arrayはどうですか? – Anshuman