[C con Clase] Problema: Errores en el Compilador

David Reza l.fix3r.l en gmail.com
Mie Dic 27 18:17:18 CET 2006


Muchas gracias ;).
Solo creo que esto no me quedó totalmente claro. Si me equivoco por favor
corríjanme:

En C++, aparte de ser bueno, siempre hay que crear los objetos y eliminarlos
después de haberlos utilizados explícitamente ya que en C++ no existen
clases administradas?

Ultima duda: El Destructor sirve para ordenar la memoria utilizada por los
objetos antes de que se eliminen pero, ¿Qué pasa si no utilizo el
destructor? ¿Qué consecuencias tiene?

El día 27/12/06, Steven Davidson <steven en conclase.net> escribió:
>
> Hola David,
>
> El pasado 2006-12-26 19:40:01, David Reza escribió:
>
> DR>
>
> Antes de continuar, quiero agregar lo que ya se ha mencionado por varios
> socios en esta discusión. Partimos de la idea básica que estamos hablando de
> "C++ Administrada o Gestionada", en corto, MC++. Por lo tanto, quiero dejar
> bien claro que MC++ no es C++. Microsoft inventó una serie de extensiones a
> C++ resultando en MC++. Esto implica que los compiladores de C++ no tienen
> por qué entender MC++. Por lo que sé, sólo los productos de Microsoft pueden
> tratar código escrito en MC++; o sea, Visual Studio .NET. MC++ al igual que
> C# sólo sirven para crear programas basadas en el armazón (framework) .NET,
> el cual es otro invento de Microsoft.
>
> Creo que ya puedes contestar a tus mismas preguntas con lo que acabo de
> explicar, pero lo haré explícitamente para el beneficio de todos.
>
> DR> Quisiera saber si alguien me podría decir cómo puedo utilizar las
> funciones
> DR> Console::Write, Console::Writeline, que supongo que son de alguna
> librería
> DR> así como cout es de la librería de <iostream>.
>
> No lo puedes hacer, porque Dev-C++ no entiende MC++ ni tampoco tiene una
> implementación de .NET, al menos que alguien lo haya hecho.
>
> DR> Y también preguntar por mis otras dudas ya expuestas:
> DR> ¿Cómo hago una clase administrada? En Visual Studio es con _gc antes
> del
> DR> nombre de la clase, en todos los compiladores es igual?
>
> Dicho lo anterior, sólo VC.NET entiende el modificador '__gc' y por tanto
> no forma parte del estándar de C++.
>
> DR> ¿La clase administrada me sirve para que los objetos se eliminen solos
> DR> cuando ya no se necesiten? También sé que se crean en el CLR (Common
> DR> Language Runtime) en vez de crearse en la pila y por tanto se tienen
> que
> DR> crear objetos primero definiendo un puntero para poder almacenar la
> DR> dirección de memoria del objeto.
>
> Exacto. '__gc' tiene que ver con el sistema automático de la "recogida de
> basura". Esto implica que el entorno se encarga de destruir aquellos objetos
> creados dinámicamente y por tanto, nuestro código no los destruye de forma
> explícita. Visto de otro modo, en C++, usamos 'new' y 'delete' para crear y
> liberar memoria para nuestros objetos y variables, mientras que en MC++,
> usamos 'gcnew' para crear memoria pero "gcdelete" es implícito y llevado
> acabo por el entorno de .NET.
>
> DR> ¿Cómo creo una clase no administrada? ¿Con _value antes del nombre de
> la
> DR> clase? ¿Es igual para todos los compiladores?
>
> Puedes usar '__nogc' para declarar algo que sea "C++ nativo". El
> modificador '__value' sirve para establecer que las variables a crear
> contendrán los valores. Bajo MC++, las variables de tipo "gc" no contienen
> la información directamente sino a través de un puntero mediante el
> montículo (heap) del entorno.
>
> DR> ¿Un puntero puede almacenar otro puntero? ¿En las clases administradas
> se
>
> Sí, un puntero puede apuntar a otro puntero o dirección de memoria.
>
> DR> supone que al crear un objeto se crea en tiempo de ejecución y en
> realidad
> DR> devuelve un puntero que almacenamos en otro puntero?
>
> Bueno, quiero recalcar el término "puntero", ya que a veces lo usamos para
> decir "una variable de tipo puntero" y otras veces como sinónimo de
> "dirección de memoria". En tu pregunta, mezclas ambos usos de la palabra
> "puntero". Es cierto que declaramos una variable de tipo puntero el cual
> servirá para guardar la dirección de memoria dada al crear memoria
> dinámicamente para el objeto administrado o gestionado.
>
>
> Nuevamente quiero aclarar que todo esto es propio de Microsoft y Visual
> C++ .NET. Si estás aprendiendo C++, no uses el libro que tienes, ya que no
> conocerás C++, sino MC++ el cual es un invento de Microsoft para programar
> usando .NET. Usar MC++ es una limitación bastante grande, al menos que no te
> interese nada más que .NET.
>
>
> Espero haber aclarado las dudas.
>
> Steven
> _______________________________________________
> Cconclase mailing list
> Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>



-- 
| = David Reza = |
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20061227/e902db0a/attachment.html>


Más información sobre la lista de distribución Cconclase