Linguagem c++ smart pointer ect..

Disponível somente no TrabalhosFeitos
  • Páginas : 49 (12062 palavras )
  • Download(s) : 0
  • Publicado : 27 de maio de 2012
Ler documento completo
Amostra do texto
Smart Pointer - Introdução


Smart Pointers (ou ponteiros inteligentes) são objetos em C++ cuja a função básica é monitorar ponteiros e desalocar os mesmos (dando um delete) quando estes não são mais utilizados. Mas como um Smart Pointer sabe a hora de destruir um objeto?


Isso depende da implementação, algumas das técnicas utilizadas são:

• Contagem de referencias: Paracada alocação de memória, o smart pointer aloca um outro objeto que ele usa para contar quantos smart pointers apontam para a mesma região de memória, esse objeto é compartilhado entre todos os smart pointers que utilizam a mesma região de memória. Sempre que um novo smart pointer passa a apontar para uma região de memória, ele incrementa esse contador, quando ele é destruído, decrementao contador. O ultimo smart pointer destruído (aquele que decrementar um contador e este chegar a zero) se encarrega de desalocar a memória.
• Controle de escopo: Essa implementação é a mais simples, ela se baseia no fato que todo objeto em C++ no final da sua vida, tem seu destrutor executado. Os ponteiros que fazem controle por escopo, simplesmente no seu destrutor destroem aregião de memória para qual apontam. Esse tipo de ponteiro é apenas utilizados para controlar objetos que não costumam ser compartilhados, como por exemplo alocar um buffer dentro de uma função ou uma classe que possui como membro um objeto que precisa ser alocado dinamicamente.

Funcionamento Básico


Um smart pointer tira proveito do fato que todo objeto em C++ criado na pilha vai terseu destrutor executado, tirando proveito dessa funcionalidade podemos criar o código a seguir:

?
|1 |class IntPointer |
|2 |{|
|3 |    public: |
|4 |        IntPointer(int *p):pValue(p) |
|5 |        {|
|6 |            assert(p); |
|7 |        }|
|8 |        ~IntPointer() |
|9 |        { |
|10 |            delete pValue;|
|11 |        } |
|12 |        int *GetValue()|
|13 |        { |
|14 |            return pValue; |
|15 |        }...
tracking img