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

 
Dmitry Fedoseev:

Ну и вот.

Вот так:

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

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

***

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

Вот собственно и все, что вы хотели знать про ООП, но боялись спросить)))

Ню-ню

 
void z(CObj* & o){
   o = new CObj();
}

А вот так прикинь, все работает.

Так, что если вопросы по ООП есть, то не стесняйтесь))))

 
Классическое разыменование нулевого указателя получилось.
 
Vladimir Simakov:

Так, что если вопросы по ООП есть, то не стесняйтесь))))

Растолкуйте пожалуйста смысл создания динамического объекта через оператор new.

При автоматическом создании объекта, объект класса создается в стеке, по  времени исполнения он быстрее нежели динамический.
При динамическом создании объекта, объект класса создается в памяти(в куче), при этом задействует  менеджер памяти ОС, процесс происходит медленнее.

Вот вопросы:
Если автоматическое создание быстрее, то почему тогда лучше использовать динамические объекты?
Явно контролировать выделение памяти?
Исключить возможное переполнение стека?
И неожиданно не потерять объект?
Так как при переполнении стека, объект автоматом будет удален?

 
Roman:


Не устали апать тему?

 
Artyom Trishkin:

Не устали апать тему?

Корректировал вопросы, для максимального точного описания.
Разве в этом есть что то плохое? Есть кнопка править, вот и правил чтоб изложить мысль.

 
Roman:

Растолкуйте пожалуйста смысл создания динамического объекта через оператор new.

При автоматическом создании объекта, объект класса создается в стеке, по  времени исполнения он быстрее нежели динамический.
При динамическом создании объекта, объект класса создается в памяти(в куче), при этом задействует  менеджер памяти ОС, процесс происходит медленнее.

Вот вопросы:
Если автоматическое создание быстрее, то почему тогда лучше использовать динамические объекты?
Явно контролировать выделение памяти?
Исключить возможное переполнение стека?
И неожиданно не потерять объект?
Так как при переполнении стека, объект автоматом будет удален?

Давайте Вы сами почитаете про статическую память, стек и кучу.
 
Roman:

Растолкуйте пожалуйста смысл создания динамического объекта через оператор new.

Один из наглядных примеров использования - когда заранее неизвестен тип объекта.

Вот здесь в справке хороший пример на эту тему: https://www.mql5.com/ru/docs/basis/operators/newoperator

Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
  • www.mql5.com
//| Создание фигуры                                                  |
 
Vladimir Simakov:

Ню-ню

Ага! Вот только почему-то все и компилируется и работает. 

Что у вас там за чудеса... никому не ведомо, но, впрочем, и не удивительно, после вчерашних примеров кода, якобы взятых откуда-то с другого места этой темы, но на самом деле где-либо отсутствующих.

***

Да, и если не забыли, о чем изначально был разговор - о передаче указателя в функцию или метод (и о том, что вы утверждали, что там якобы какая-то утечка памяти происходит), а уж в этом случае точно & не нужен. 


 
Roman:

Растолкуйте пожалуйста смысл создания динамического объекта через оператор new.

При автоматическом создании объекта, объект класса создается в стеке, по  времени исполнения он быстрее нежели динамический.
При динамическом создании объекта, объект класса создается в памяти(в куче), при этом задействует  менеджер памяти ОС, процесс происходит медленнее.

Вот вопросы:
Если автоматическое создание быстрее, то почему тогда лучше использовать динамические объекты?
Явно контролировать выделение памяти?
Исключить возможное переполнение стека?
И неожиданно не потерять объект?
Так как при переполнении стека, объект автоматом будет удален?

Если заранее известно количество объектов и оно неизменно в процессе работы программы, то и не нужен нью. Во всех остальных случаях - new.