Compartilhar via


Baseado em ponteiros (C++)

Específicos do Microsoft

O __based palavra-chave permite declarar ponteiros baseados em ponteiros (os ponteiros são deslocamentos de ponteiros existentes).

type __based( base ) declarator 

Comentários

Com base nos endereços de ponteiro de ponteiros são a única forma do __based a palavra-chave válida em compilações de 32 bits ou 64 bits.Para o compilador C/C++ da Microsoft de 32 bits, um ponteiro com base é um deslocamento de 32 bits de um ponteiro de 32 bits com base.Uma restrição semelhante mantém para ambientes de 64 bits, onde um ponteiro com base é um deslocamento de 64 bits da base de dados de 64 bits.

Um uso baseada em ponteiros de ponteiros é para identificadores persistentes que contêm ponteiros.Uma lista vinculada que consiste em ponteiros com base em um ponteiro pode ser salvo no disco e recarregada para outro local na memória, com os ponteiros restantes válido.Por exemplo:

// based_pointers1.cpp
// compile with: /c
void *vpBuffer;
struct llist_t {
   void __based( vpBuffer ) *vpData;
   struct llist_t __based( vpBuffer ) *llNext;
};

O ponteiro vpBuffer é atribuído o endereço de memória alocada em algum momento posterior no programa.A lista vinculada é realocada em relação ao valor de vpBuffer.

ObservaçãoObservação

Identificadores persistentes que contêm ponteiros também podem ser realizadas por meio de arquivos mapeados na memória.

Ao cancelar a referência de um ponteiro com base, a base deve ser especificado explicitamente ou implicitamente conhecido por meio da declaração.

Para compatibilidade com versões anteriores, _based é um sinônimo de __based.

Exemplo

O código a seguir demonstra como alterar um ponteiro com base, alterando sua base.

// based_pointers2.cpp
// compile with: /EHsc
#include <iostream>

int a1[] = { 1,2,3 };
int a2[] = { 10,11,12 };
int *pBased;

typedef int __based(pBased) * pBasedPtr;

using namespace std;
int main() {
   pBased = &a1[0];
   pBasedPtr pb = 0;

   cout << *pb << endl;
   cout << *(pb+1) << endl;

   pBased = &a2[0];

   cout << *pb << endl;
   cout << *(pb+1) << endl;
}
  

Consulte também

Referência

Palavras-chave C++

alloc_text