Вопросы по ООП в MQL5 - страница 5

 
Комментарии, не относящиеся к этой теме, были перенесены в "Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам".
 
Vladimir Simakov:
Да ладно! То-то постоянно использую.

Где? В каком месте и каким образом?

Модераторы, извините за повтор вопроса. Уж очень хочется получить на него ответ.

 
Artyom Trishkin:

А для чего вы нарочно переназначили указатель, переданный в функцию ? Конечно будет утечка. Но это не "классическая утечка", а классическая ошибка работы с указателем на объект.

Здесь не нужно создавать новый объект, а работать нужно с внешним объектом, указатель на который передан в функцию.

Это не я. Из чужого кода с этой ветки взято. Для примера взято.
 
Dmitry Fedoseev:

Где? В каком месте и каким образом?

Модераторы, извините за повтор вопроса. Уж очень хочется получить на него ответ.

Имейте терпение. До дома доберусь, скину.
 
Dmitry Fedoseev:

Где? В каком месте и каким образом?

Модераторы, извините за повтор вопроса. Уж очень хочется получить на него ответ.

Если я правильно понял вопрос, то объявляем класс как объект с помощью new.
Далее через созданный объект, с помощью точки, вызываем публичные методы класса.
После выполнения всех вызванных методов, очищаем память, удалив созданный объект delete.

 
Roman:

Если я правильно понял вопрос, то объявляем класс как объект с помощью new.
Далее через созданный объект, с помощью точки, вызываем публичные методы класса.
После выполнения всех вызванных методов, очищаем память, удалив созданный объект delete.

Не. Сначала подумал, что это параметр функции такой - объект но не по ссылке, но в конце точка с запятой. Если же это обычное создание объекта при объявлении, то с чего оно в скобках? Поэтому пока остается загадкой века.  

 
Dmitry Fedoseev:

Не. Сначала подумал, что это параметр функции такой - объект но не по ссылке, но в конце точка с запятой. Если же это обычное создание объекта при объявлении, то с чего оно в скобках? Поэтому пока остается загадкой века.  

В скобках - потому, что это примечание по тексту))))
 
Artyom Trishkin:

А для чего вы нарочно переназначили указатель, переданный в функцию ? Конечно будет утечка. Но это не "классическая утечка", а классическая ошибка работы с указателем на объект.

Здесь не нужно создавать новый объект, а работать нужно с внешним объектом, указатель на который передан в функцию.

да дело не в моем примере, а в реализации самих указателей в MQL -  то их не нужно разименовывать (причем указатель можно присвоить и экземпляру обьекта!) , то можно вместо передачи указателя передать ссылку на обьект  https://www.mql5.com/ru/forum/1111/page2471#comment_11796665

то вот вообще отсутствует толком инфа откуда и когда появился  (CObj & obj)  (причем & - это не операция разименования указателя, а получение указателя GetPointer() )

ладно, не хочу из пустого в порожнее... я уже себе сказал и в очередной раз на форуме повторю - MQL это не С++ и точка! так реализовано - ну вариантов нет

 
Igor Makanu:

да дело не в моем примере, а в реализации самих указателей в MQL -  то их не нужно разименовывать (причем указатель можно присвоить и экземпляру обьекта!) , то можно вместо передачи указателя передать ссылку на обьект  https://www.mql5.com/ru/forum/1111/page2471#comment_11796665

то вот вообще отсутствует толком инфа откуда и когда появился  (CObj & obj)  (причем & - это не операция разименования указателя, а получение указателя GetPointer() )

ладно, не хочу из пустого в порожнее... я уже себе сказал и в очередной раз на форуме повторю - MQL это не С++ и точка! так реализовано - ну вариантов нет

Что-то вы драматизируете, нет здесь никаких сложностей и непонятностей. 

 
Vladimir Simakov:
В скобках - потому, что это примечание по тексту))))

Ну и вот.

Вот так:

void z(CObj * o){
}

даже не просто можно, а лучше, потому что можно вот так вызывать:

CObj obj;
z(GetPointer(obj));

Если передавать указатель по ссылке, нужна будет еще одна переменная для указателя.

***

А если в функцию надо передать указатель, чтобы в функции создать объект, вот так работает:

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

CObj * obj;

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

void z(CObj & o){
   o = new CObj();
}
Вот собственно и все, что вы хотели знать про ООП, но боялись спросить)))
Причина обращения: