Передача двойного указателя.

 

Необходимо, что бы функция через параметр вернула указатель на созданный на куче объект. В C++ для этого используется двойной указатель:

bool foo(SomeClass** object_ptr)
{
  *object_ptr = new SomeClass;
  ...

  return true;
}

int main()
{
  SomeClass* object_ptr = nullptr;
  
  foo(&object_ptr);
  
  return 0;
}

Однако, в MQL5 двойные указатели не поддерживаются. Можно конечно, возвращать из функции, но в таком случае, функция перестает быть bool и необходимо далее, делать проверку на NULL, что не удобно и ухудшает читаемость кода.

 
DrSky:

Можно конечно, возвращать из функции, но в таком случае, функция перестает быть bool

Попробуйте возвращать через входной параметр - &.

 
fxsaber #:

Попробуйте возвращать через входной параметр - &.

Через & можно вернуть значение, но не указатель. Объект в дин памяти создается внутри функции и требуется из функции передать указатель на объект.

 
DrSky #:

Через & можно вернуть значение, но не указатель. Объект в дин памяти создается внутри функции и требуется из функции передать указатель на объект.

Нормальное решение - возвращать NULL, если что-то пошло не так.
 
DrSky #:

Через & можно вернуть значение, но не указатель.

class A {};

bool f( A* &Ptr )
{
  Ptr = new A;
  
  return(Ptr != NULL);
}

void OnStart()
{
  A* Ptr;
  
  if (f(Ptr))
    delete Ptr;
}
 
fxsaber #:

Вот оно че михалыч... Спасибо!

 
Sergey Gridnev #:
Нормальное решение - возвращать NULL, если что-то пошло не так.

Решение рабочее, но не элегантное. )

 
DrSky:
Можно конечно, возвращать из функции, но в таком случае, функция перестает быть bool

Иногда бывает удобно возвращать успешность операции в значение одного из входных параметров. Например, для случаев, когда требуется возвращать более одного bool.

Мой коммент относится только к процетированной части сообщения.