Frage

Dies ist die Methode für eine Variable auf dem Heap in C ++ die Schaffung:

T *ptr = new T;

ptr bezieht sich auf einen Zeiger auf das neue T, offensichtlich. Meine Frage ist, können Sie dies tun:

T *ptr = new T*;

Das scheint es zu einigen sehr, sehr gefährlichen Code führen könnte. Weiß jemand, ob dies möglich ist / wie man es richtig benutzen?

War es hilfreich?

Lösung

int** ppint = new int*;
*ppint = new int;

delete *ppint;
delete ppint;

Andere Tipps

new T* gibt einen Zeiger auf einen Zeiger auf eine T. So die Erklärung nicht korrekt ist, sollte es sein:

T** ptr = new T*;

Und es wird auf dem Heap befindet.

Ja, können Sie einen Zeiger auf einen Zeiger deklarieren ... und ja, wird der Zeiger auf dem Heap sein.

Es wurde erwähnt, wie, warum Sie so etwas wie dieses benötigen. Die Sache, die den Sinn kommt, ist ein dynamisches Array. (Die meisten Vektor-Implementierungen verwenden diese tatsächlich.)

// 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

Als Ergebnis kopieren wir eine Reihe von Zeigern unser Angebot zu erhöhen, nicht die Objekte selbst.

Sie können nicht tun

T *ptr = new T*;

, da der Rückgabetyp von new foo ist "Zeiger auf foo" oder foo *.

Sie können tun,

T **ptr = new T*;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top