Pergunta

Este é o método para a criação de uma variável sobre o montão em C ++:

T *ptr = new T;

ptr refere-se a um ponteiro para o novo T, obviamente. A minha pergunta é, você pode fazer isso:

T *ptr = new T*;

Isso parece que poderia levar a um código muito, muito perigoso. Alguém sabe se isso é possível / como usá-lo corretamente?

Foi útil?

Solução

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

delete *ppint;
delete ppint;

Outras dicas

new T* retorna um ponteiro para um ponteiro para um T. Assim, a declaração não está correta, ele deve ser:

T** ptr = new T*;

E vai residir no heap.

Sim, você pode declarar um ponteiro para um ponteiro ... e sim, o ponteiro será na pilha.

Foi mencionado como por que você pode precisar de algo assim. A única coisa que vem à mente é uma matriz dinâmica. (A maioria das implementações vetor usar este fato.)

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

Como resultado, nós copiar um monte de ponteiros para aumentar a nossa matriz, não a si mesmos objetos.

Você não pode fazer

T *ptr = new T*;

desde o tipo de retorno de new foo é "ponteiro para foo" ou foo *.

Você pode fazer

T **ptr = new T*;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top