C/Visual C - Urgente:Creación de Objetos Dinámicamente

 
Vista:

Urgente:Creación de Objetos Dinámicamente

Publicado por Slim (13 intervenciones) el 03/10/2001 19:44:23
Si tengo la siguiente clase:

class Word{
public:
char *name; //Contendra la palabra
Word *MyDir; //Contendra la direccion del objeto
Word (Word *p, char *); //Constructor
};

Word :: Word (Word *p, char *n){ //Definicion del constructor
name = n;
MyDir = p;
}

Si el constructor de mi clase necesita la direción del objeto a crear ,¿es valida esta sentencia :
Word A ( &A, " Palabra" );
y como le hago para crear un objeto dinamicamente de esta clase, he tratado con estas sentencias:

Word *p;
p = new Word( p, "Palabra" );
if ( !p ){
cout << "Error de direccionamiento\n";
exit ( 0 );
}

pero despues de crear varios objetos se estrella el programa
¿como le puedo hacer?

P.D Agradezco de antemano su pronta respuesta.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Urgente:Creación de Objetos Dinámicamente

Publicado por emilio (42 intervenciones) el 03/10/2001 22:54:23
Tienes que pedir al sistema memoria para tus punteros, recuerda que cuando mandas "Palabra" al constructor esto se crea en el segmento stack y es posible que despues alguien mas escriba ahi, y con respecto al puntero myDir si cambias p fuera del objeto cambiara myDir del objeto porque lo que haces es usar la misma direccion que viene de p.
Por lo tanto tienes que hacer en el constructor:

Word :: Word (Word *p, char *n)
{
int size=strlen(n);
char* name=(char*)malloc(sizeof(char)*(size+1));
strcpy(name,n);
myDir=(Word*)malloc(sizeof(Word));
*myDir=*p
}

Y en el destructor:

Word :: ~Word ()
{
if(name!=NULL)
{
free(mame);
name=NULL:
}
if(myDir!=NULL)
{
free(myDir);
myDir=NULL;
}
}

Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:porque...?

Publicado por manuel (9 intervenciones) el 04/10/2001 03:25:18
hola.
primero: cuales son los errores?
segundo: el planteamiento de tu clase no me convence. me explicas porque tienes dentro de clase 'word' un puntero a clase 'word'? si ya tienes un puntero a 'char'(name), que es una palabra?
saludos
manuel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Urgente:Creación de Objetos Dinámicamente

Publicado por lUIS (1 intervención) el 09/10/2001 10:10:16
No es muy lógico que en el constructor copies los punteros, deberías de copiar el objeto.
Recuerda que cuando las clases tengan datos miembros que son punteros a memoria dinámica debes sobrecargar el constructor copia ya que nunca sabemos cuando puede ser invocado.
Por tanto yo que tu copiaría en el constructor objetos y no punteros y redefiniría el constructor copia.
Saludos y espero que te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar