Ошибки, баги, вопросы - страница 3459

 
fxsaber #:

Совсем ерунда.

всё ок...

указатель в mql это не указатель в C++. Вообще принципиально разные вещи и ближе к syntax sugar

вас попутывает A1-- :-)

 
Fernando Carreiro #:
input group     "Group 1"

Почему вы считаете это ошибкой?

Это давно уже так.

Если запустить скрипт из справки к IndicatorParameters, он сразу показывает, что input group является полноценным параметром индикатора, который нужно передавать во входные параметры функции iCustom()


Short name Round_Levels, type IND_CUSTOM
parameter 0: type=TYPE_STRING, long_value=0, double_value=0,string_value=Indicators\Круглые уровни\Round_Levels.ex5
parameter 1: type=TYPE_INT, long_value=5, double_value=0,string_value=(null)
parameter 2: type=TYPE_INT, long_value=0, double_value=0,string_value=(null)
parameter 3: type=TYPE_BOOL, long_value=1, double_value=0,string_value=(null)
parameter 4: type=TYPE_UINT, long_value=12180223, double_value=0,string_value=(null)

и так далее...


 
Koldun Zloy #:
А разрешать создавать временный объект при помощи new нет никакого смысла, так как его в принципе удалить невозможно.

При большом желании удалить то можно

class A {};

void f(A& a) { delete GetPointer(a); }

void OnStart()
{
  f(new A);
}

Другое дело, что у программиста не должно возникать желания использовать new в подобном месте.

Warning лишним бы не был, я согласен.

[Удален]  
Aleksandr Slavskii #: Почему вы считаете это ошибкой? Это давно уже так. Если запустить скрипт из справки к IndicatorParameters, он сразу показывает, что input group является полноценным параметром индикатора, который нужно передавать во входные параметры функции iCustom()

Лично я считаю это неправильной реализацией, но понимаю, что MetaQuotes и некоторые другие пользователи могут не считать это проблемой.

Но я благодарю вас за ваши комментарии.

I personally consider it an incorrect implementation, but I understand that MetaQuotes and some other users may not consider this an issue.

But, I thank you for your comments.

 
Maxim Kuznetsov #:

всё ок...

указатель в mql это не указатель в C++. Вообще принципиально разные вещи и ближе к syntax sugar

Без разницы, что внутри. Синтаксис кривой, когда объект и указатель друг другу присваиваются.

class A {};

void OnStart()
{
  A* Pointer = NULL;
  A Object;
  
  Pointer = Object; // Кривой синтаксис.
  Pointer = GetPointer(Object);
  Pointer = &Object;
}
 
fxsaber #:

Совсем ерунда.

Ого, я не думал, что такое вообще скомпилируется.


Господа разработчики (или кто-нибудь), объясните пожалуйста, почему объект с id 2 удален два раза, а объект с id 1 не удалялся:

class A
  {
private:
   int  m_id;
public:
   void method()  { Alert(m_id);                }
        A(int id) { m_id = id;                  }
        ~A()      { Alert("destructor ", m_id); }
  };

void OnStart()
{
  A Object(1);
  f(Object);
  Object.method();
}

void f(A& a)
  {
   A SecondObject(2);
   a = SecondObject;
  }


 
Vladislav Boyko #:
Господа разработчики (или кто-нибудь), объясните пожалуйста, почему объект с id 2 удален два раза, а объект с id 1 не удалялся:

Без присваивания все удаляется норамльно:

class A
  {
private:
   int  m_id;
public:
   void method()  { Alert(m_id);                }
        A(int id) { m_id = id;                  }
        ~A()      { Alert("destructor ", m_id); }
  };

void OnStart()
{
  A Object(1);
  f(Object);
  Object.method();
}

void f(A& a)
  {
   A SecondObject(2);
   //a = SecondObject;
  }


А с присваиванием - чудеса.

 
Vladislav Boyko #:
А с присваиванием - чудеса
Очевидно, приватные поля копируются при присвоении.
 
Vladislav Boyko #:

почему объект с id 2 удален два раза, а объект с id 1 не удалялся:

Сначала SecondObject, затем Object (поля которого скопированы из SecondObject). Как со структурами.

 
Sergey Gridnev #:
Очевидно, приватные поля копируются при присвоении.
fxsaber #:

Сначала SecondObject, затем Object (поля которого скопированы из SecondObject).

Точно, спасибо, я не подумал, что поля копируются.


Warning бы хотя бы. Как по мне, плохо, что компилятор совсем игнорирует такое:

class A {};

void OnStart()
{
  A Object = new A();
}