Preguntas sobre POO en MQL5 - página 5

 
Los comentarios no relacionados con este tema han sido trasladados a "Cualquier pregunta de los novatos en MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos".
 
Vladimir Simakov:
¡Vamos! Lo uso todo el tiempo.

¿Dónde? ¿En qué lugar y cómo?

Moderadores, perdón por repetir la pregunta. Realmente quiero obtener una respuesta.

 
Artyom Trishkin:

¿Por qué reasignar intencionadamente un puntero pasado a una función? Por supuesto, habrá una fuga. Pero esto no es una "fuga clásica", sino un error clásico de trabajar con un puntero a un objeto.

Aquí no hay que crear un nuevo objeto, sino manejar el objeto externo cuyo puntero se pasó a la función.

Este no soy yo. Está tomado del código de otra persona en este hilo. Se toma como ejemplo.
 
Dmitry Fedoseev:

¿Dónde? ¿En qué lugar y cómo?

Moderadores, perdón por repetir la pregunta. Realmente quiero obtener una respuesta.

Tenga paciencia. Llegaré a casa y lo publicaré.
 
Dmitry Fedoseev:

¿Dónde? ¿En qué lugar y cómo?

Moderadores, perdón por repetir la pregunta. Realmente quiero obtener una respuesta.

Si entiendo bien la pregunta, declaramos la clase como un objeto usando new.
A continuación, utilice un punto para llamar a los métodos públicos de la clase a través del objeto creado.
Después de que se ejecuten todos los métodos llamados, limpiamos la memoria borrando el objeto creado delete.

 
Roman:

Si he entendido bien la pregunta, declaramos la clase como un objeto utilizando new.
Luego llamamos a los métodos públicos de la clase a través del objeto creado, utilizando un punto.
Después de que se ejecuten todos los métodos llamados, limpiamos la memoria borrando el objeto creado delete.

No. Al principio pensé que era un parámetro de la función así - objeto pero no por referencia, pero hay un punto y coma al final. Si se trata de una creación normal de objetos en la declaración, ¿por qué está entre paréntesis? Así que por ahora sigue siendo el misterio del siglo.

 
Dmitry Fedoseev:

No. Al principio pensé que era un parámetro de la función así - objeto pero no por referencia, pero hay un punto y coma al final. Si se trata de una creación normal de objetos en la declaración, ¿por qué está entre paréntesis? Así que por ahora sigue siendo el misterio del siglo.

Entre paréntesis - porque es una nota sobre el texto))))
 
Artyom Trishkin:

¿Y por qué has reasignado deliberadamente un puntero pasado a una función? Por supuesto, habrá una fuga. Pero no es una "fuga clásica", sino un error clásico de manejo de un puntero a un objeto.

Aquí no es necesario crear un nuevo objeto, sino manejar el objeto externo cuyo puntero se pasó a la función.

No se trata de mi ejemplo, se trata de la implementación de los propios punteros en MQL - si no necesitas desreferenciarlos (¡y el puntero puede ser asignado a una instancia del objeto!), si en lugar de pasar un puntero puedes pasar una referencia al objetohttps://www.mql5.com/ru/forum/1111/page2471#comment_11796665

aquí no tenemos información detallada sobre dónde y cuándo apareció (CObj& obj) (& no es una operación de desreferenciación de punteros, sino de adquisición de un puntero GetPointer() )

Ok, no quiero desperdiciar información... Ya me lo he dicho, y lo repetiré una vez más en este foro - MQL no es C++, así es como se implementa - bueno, no tengo otras opciones

 
Igor Makanu:

No se trata de mi ejemplo, se trata de la implementación de los propios punteros en MQL - si no necesitas desreferenciarlos (¡y el puntero puede ser asignado a una instancia del objeto!), si en lugar de pasar un puntero puedes pasar una referencia al objeto https://www.mql5.com/ru/forum/1111/page2471#comment_11796665

aquí no tenemos información detallada sobre dónde y cuándo apareció (CObj& obj) (& no es una operación de desreferenciación de punteros, sino de adquisición de un puntero GetPointer() )

Ok, no quiero desperdiciar ninguna información... Ya me lo he dicho, y lo repetiré una vez más en este foro - MQL no es C++, así es como se implementa - bueno, no tengo otras opciones

Estás siendo dramático, no hay complejidades ni confusiones.

 
Vladimir Simakov:
Los paréntesis se deben a que se trata de una nota sobre el texto ))))

Así que ahí tienes.

Así:

void z(CObj * o){
}

Ni siquiera sólo puede, sino que es mejor, porque se puede llamar así:

CObj obj;
z(GetPointer(obj));

Si pasas un puntero por referencia, necesitas otra variable para el puntero.

***

Y si hay que pasar un puntero a una función para crear un objeto en la función, así es como funciona:

class CObj{
   public:
   int f(){
      return(33);
   }
};

CObj * obj;

void OnStart(){
  z(obj);
  delete(obj);
}

void z(CObj & o){
   o = new CObj();
}
Eso es básicamente todo lo que querías saber sobre OOP, pero tenías miedo de preguntar))