あなたは、ヒープ上のポインタを宣言することはできますか?
-
16-09-2019 - |
質問
これはC ++でヒープ上に変数を作成するための方法である:
T *ptr = new T;
PTRは明らかに、新しいTへのポインタを参照します。私の質問は、あなたがこれを行うことができ、次のとおりです。
T *ptr = new T*;
それはいくつかの非常に、非常に危険なコードにつながる可能性があるように思えること。これが可能であるならば、それを適切に使用する方法/誰を知っていますか?
解決
int** ppint = new int*;
*ppint = new int;
delete *ppint;
delete ppint;
他のヒント
new T*
だから宣言が正しくないT.へのポインタへのポインタを返し、それがなければならない。
T** ptr = new T*;
そして、それはヒープ上に存在します。
はい、あなたはポインタへのポインタを宣言することができます...はい、ポインタがヒープになります。
これは、あなたがこのようなものが必要になる場合があります理由として挙げられました。心に来る事は動的配列です。 (ほとんどのベクトルの実装では、実際にこれを使用しています。)
// Create array of pointers to object
int start = 10;
SomeObject** dynamic = new SomeObject*[start];
// stuff happens and it gets filled
// we need it to be bigger
{
SomeObject** tmp = new SomeObject*[start * 2];
for (size_t x = 0; x < start; ++x)
tmp[x] = dynamic[x];
delete [] dynamic;
dynamic = tmp;
}
// now our dynamic array is twice the size
は、結果として、私たちは、私たちの配列を増加させないオブジェクト自体をポインタの束をコピーします。
あなたが行うことはできません。
T *ptr = new T*;
new foo
の戻り型が "fooへのポインタ" 又はfoo *
であるからである。
あなたが行うことができます。
T **ptr = new T*;
所属していません StackOverflow