MQL5 Компилятор не различает класс и указатель на него - страница 11

 
Ilya Malev:

Вот это: (* ) здесь не нужно

* нужно в мкл только тогда когда непосредственно к * указателю применяются операции =, ==, !=, !, && или ||

ВОт как раз по ИМХО это необходимо, чтобы не забывать с чем именно имеешь дело (объект или указатель на него).

Ilya Malev:

 убрать его снова, и сделать вид, что его и не было)))

Таки да. Дальнейшее развитие с указателями приведет к созданию полного клона C++.

Наверное всё таки пойдут в направлении C# где в "managed code" указателей нет а всё есть объект, даже простые типы bool int double и т.д.

 
Ilya Malev:

И ещё, кстати, вполне может получится так, что раз на всех официальных каналах (форум, справка, документация) об операторе * гробовая тишина, возможно, админы раздумывают как раз о том, чтобы убрать его снова, и сделать вид, что его и не было))) Так что сильно рассчитывать на его использование вообще опасно пока имхо.

Тишина наверно потому, что для 99.9% пользователей до всего этого нет дела. Зачем их моск напрягать лишней информацией?  А те, кому эта фича была нужна - попросили, и получили её. 

Ведь вам тоже не было дела до этой фичи до сего момента, не так ли?  А теперь начинаете отчаянно придумывать оправдания, почему вы о ней не знали ;)  Какая разница, когда её ввели: сразу или спустя месяца?  Вы о ней как не знали, так и продолжали бы не знать, если б я не сказал )  

 

Хм... Может, и указатели на массив есть ? Надо бы проверить... Мне их так не хватает...

 
Georgiy Merts:

Хм... Может, и указатели на массив есть ? Надо бы проверить... Мне их так не хватает...

Нет. Приходится массивы в классы засовывать, на них есть указатели.

 
Ilya Baranov:

Нет. Приходится массивы в классы засовывать, на них есть указатели.

Да, увы.

Собственно, мне вполне удобны классы-наследники CArray. Единственное, для чего бы хотелось указатели на массивы - это индикаторы, там передаются ссылки на массивы, и приходится эти ссылки "тащить через всю иерархию" объектов, что жутко неудобно...

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

 
Georgiy Merts:

2. MQL и не должен удалять то, что он не выделил. Верно выше сказал Дмитрий - создал объект - удали. Мне крайне не нравится практика "уборщика мусора" в том же C#, когда объекты удаляются не тогда, когда это предусмотрено мной, а тогда, когда захочется сборщику.  

Никогда сборщик C# не удалит живой объект или указатель. Его предназначение удалять мусор из трупиков из кучи и иногда ее дефрагментировать.

 
Alexey Volchanskiy:

Никогда сборщик C# не удалит живой объект или указатель. Его предназначение удалять мусор из трупиков из кучи и иногда ее дефрагментировать.

Дык я не утверждаю, что сборщик мусора удалит живой объект или указатель. Я говорю о том, что он его удалит тогда, когда ему хочется. А это, на мой взгляд, не есть хорошо.

Я-то могу работать и с удалением, и без. И даже смарт-поинтеры можно запилить... Но, тем не менее, считаю, что удаление объектов должно быть, и удалять объект должен тот, кто его создал.

Такой вот я олдскульный закостенелый старпер.

 
SemenTalonov:

Наверное всё таки пойдут в направлении C# где в "managed code" указателей нет а всё есть объект, даже простые типы bool int double и т.д.

Да, но при этом оставили возможность работы с указателями в unmanaged. Правда, у такого кода есть ограничения на дистрибьюцию.

 
Georgiy Merts:

Дык я не утверждаю, что сборщик мусора удалит живой объект или указатель. Я говорю о том, что он его удалит тогда, когда ему хочется. А это, на мой взгляд, не есть хорошо.

Я-то могу работать и с удалением, и без. И даже смарт-поинтеры можно запилить... Но, тем не менее, считаю, что удаление объектов должно быть, и удалять объект должен тот, кто его создал.

Такой вот я олдскульный закостенелый старпер.

Жорж, ты бы привел пример, я тебя не понимаю. Ты это имеешь в виду, что ли? Наверное, смарт-пойнтеры можно сделать и самому.

bool first = false;

int Foo()
{
  int i;
  if(!first)
  {
     first = true; 
     i = 123;
  }
  return i;   
}

// И ты будешь надеятся, что i сохранит свое значение между сотней вызовов Foo? Может да (очень редко, если Foo вызывается 100 раз подряд), а может и нет.
 
Alexey Volchanskiy:

Жорж, ты бы привел пример, я тебя не понимаю. Ты это имеешь в виду, что ли? Наверное, смарт-пойнтеры можно сделать и самому.

Нет. Понятно, что в данном случае переменная должна быть удалена при выходе из блока.

Я говорю про объекты, созданные по new:

CMyObj* pmoObject  = new CMyObject;

В стандарте С# указывается: "И объекты типа значения, такие как структуры, и объекты ссылочного типа, такие как классы, уничтожаются автоматически, но объекты типа значения уничтожаются при уничтожении содержащего их контекста, в то время как объекты ссылочного типа уничтожаются сборщиком мусора через неопределенное время после удаления последней ссылки на них"

Вот, мне это "неопределенное время" - не нравится. Хотя, я даже допускаю, что сборщик мусора может удалить объект куда эффективнее, чем я сам, удаляя объект в деструкторе создавшего его класса.

Причина обращения: