c++


Eu seria um elfo.

Eu, um elfo
Peguei no blog do Marcelo

E apesar de não ter atualizado o blog nos últimos tempos, várias coisas aconteceram. Entre muitas movimentações no trabalho (haptics e física ainda dão um baita dum trabalho pra funcionarem juntos), comprei vários livros que estava querendo, entre eles “Antologia do Carnaval do Recife” do Mario Souto Maior, “Maracatus do Recife” do Guerra Peixe (é, o cara que ensinou Sivuca e fez arranjos pra Tom Jobim e Chico Buarque). Além disso, terminei de ler Snow Crash, ficção científica de primeira, aliás, foi até esse autor que cunhou o termo avatar, usado até hoje no contexto de Realidade Virtual, e outra contribuição sensacional foi o conceito de Metaverso, que apesar de já ter aparecido algo parecido em Neuromancer (provavelmente em outros autores de ficção também), tem muito mais detalhes e é absurdamente parecido com Second Life, tanto que semana passada até li uma entrevista com o inventor do SL e ele cita Snow Crash.

Bem, gostei tanto do estilo do Neal Stenphenson que comprei “The Diamond Age”. Esse merece um post logo mais, quando a leitura estiver mais adiantada. E só pra fechar essa ala literária, hoje compre “Do Frevo ao Manguebeat” do José Telles, fazia um tempo que estava atrás, finalmente encontrei num sebo de São Paulo, via o estante virtual. Grande jogada essa de congregar sebos virtuais.

E sobre engenharia de software, bem, estou basicamente lendo os effective c++ do Meyers, os 2 livros do Joel Spolsky e o Code Complete do McConnell. Grandes livros, mentes geniais. O Code Complete merece um post à parte, pois apesar de soar intuitivo, está repleto de conselhos e visão não-distorcidas sobre as várias fases pelas quais um projeto de software (de qualquer tamanho) passa.

Por último, pra quem gosta de música boa, visitem o blog que eu participo, o som barato.

E era isso.

Anúncios

Depois de um longo e tenebroso inverno (clichè), estou de volta por conta da sugestão de um cara com quem conviv lá no trabalho por algum tempo e que está indo morar em Fortaleza agora: o maníaco do machado, Emanoel Xavier.

Bem, ontem nas minhas caoticidades (vide “Leituras Caóticas”), estava lendo sobre implementação de Singletons em C++ (e todas as suas dificuldades e gambiarras, mas elocubrações para outro post…) e acabei descobrindo um jeito diferente de dar um new: o placement new.

Segundo a biblioteca padrão de C++, um placement new é somente um overloading de new com passagem de parâmetros adicionais e cuja implementação-padrão não aloca memória. Deixa eu explicar com um exemplo de utilização, depois adentro o mundo das cobras:

Utilização:

class A{
public:
A(){}
~A(){}
...
};
A *p = new A;
...
delete p;
...
p = new (a,b) A; // onde a e b sao objetos ou tipos primitivos quaisquer

Na linha em negrito está o pulo do gato, a sintaxe é diferente do new usual, visto que agora dá pra passar parâmetros.

Bem, eu falei lá em cima que a implementação-padrão não aloca memória, ou seja, em algum dos parâmetros passados no placement new a memória já foi alocada, o que eu quero dizer com isso? A implementação de um placement new parece com algo do tipo:

void *operator new(size_t, void *ondeColocaOObjeto)
{ return ondeColocaOObjeto;}

Vale salientar que o fato de que quando acontece alguma exceção em um construtor o delete correspondente também é chamado, com os mesmos parâmetros e mesma ordem, isto é, quando acontece uma exceção em um placement new com parâmetros a, b e c, o respectivo placement delete com parâmetros a, b e c é chamado.