[]演算子または++を一意のポインタまたはshared_pointerで使用できますか?私たちは生のポインタのためにそれを使用するよう共有ポインタ[]演算子と++演算子
int * a = new int[10];
a[0] = 2; // We can use [] operator;
スマートポインタのための同様の方法はありますか?
これはいつ使うべきですか?
- それがない場合、なぜですか?
- MultiDimensional Arrayでも可能ですか?
[]演算子または++を一意のポインタまたはshared_pointerで使用できますか?私たちは生のポインタのためにそれを使用するよう共有ポインタ[]演算子と++演算子
int * a = new int[10];
a[0] = 2; // We can use [] operator;
スマートポインタのための同様の方法はありますか?
これはいつ使うべきですか?
両方std::unique_ptrとstd::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
を使用することをおすすめします。
未処理ポインタの場合と同じように、int []ではなくint []へのポインタです。また、++ opertatorを使用することもできますか? – Anshuman
@Anshumanどのようなポインタを意味しましたか?それらは生ポインタとして同じヘヒーリを提供します。はい、直接演算子++を使用することはできません。それはスマートポインタがするはずのものではありません。 – songyuanyao
ありがとう、MultiDimensional Arrayはどうですか? – Anshuman
はい。ここで
は一例であり http://en.cppreference.com/w/cpp/memory/unique_ptr/operator_at
std::unique_ptr<int[]> fact(new int[size]);
http://www.cplusplus.com/reference/memory/unique_ptr/あなたがアレイ上shared_pointerを使用することができます 'shared_ptr' – PcAF
について同じ操作を行います:' std :: shared_ptr> ' –
dkg