Desta vez deixo-vos um exemplo trivial de RAII em C++, trata-se do tratamento de ficheiros na biblioteca standard. Contráriamenet ao C em C++ não é necessário abrir ou fechar explicitamente um ficheiro onde se queira escrever ou donde se queira ler, o constructor abre o ficheiro e o destructor fecha-o. Aqui vai um pequeno exemplo:
Penso que este exemplo mostra bem que se quisermos fazer tratar um recurso do tipo socket o ideal é escrever ume pequena classe utilitária que possa gerir a abertura e o fecho do socket.
#include <fstream>
#include <cmath>
int main(int argc, char*argv[])
{
if (argc<2)
return 1;
std::ofstream out(argv[1]);
for (double x=0.0; x<10.0; x+=0.01)
out << x << " " << sin(x) << std::endl;
}
Penso que este exemplo mostra bem que se quisermos fazer tratar um recurso do tipo socket o ideal é escrever ume pequena classe utilitária que possa gerir a abertura e o fecho do socket.
Então RAII é uma técnica usada pela lib de C++ ?
ResponderEliminarExactamente, infelizmente lê-se por aí muito código que ainda faz como no C :).
ResponderEliminarAté no java para trabalhar com recursos como ficheiros se usam padrões como no C
ResponderEliminarA razão é simples: o java não pode garantir a execução do método finalize, logo não se presta a uma implementação simples do idioma RAII.
ResponderEliminarJá o C# permite fácilmente implementar o RAII...