И снова указатели на объекты. Ошибка при работе с ними - страница 4

 
Sergey Gridnev #:
У вас все в кучу смешано. Статик классов не существует, по крайней мере в MQL таких нет.

Возможно, скажу бред. Но статик класс в C#  это синглтон из с++. Т.е. очень похожие понятия,  в C# он есть https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/classes-and-structs/static-classes-and-static-class-members

Руководство по программированию на C#. Статические классы и члены статических классов
Руководство по программированию на C#. Статические классы и члены статических классов
  • 2022.07.19
  • BillWagner
  • docs.microsoft.com
В C# нельзя создавать экземпляры статических классов. Доступ к членам статического класса осуществляется с использованием самого имени класса.
 
vbymrf #:

Возможно, скажу бред. Но статик класс в C#  это синглтон из с++. Т.е. очень похожие понятия,  в C# он есть https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/classes-and-structs/static-classes-and-static-class-members

Глянул по ссылке и вот что скажу:
1. Нет статик класс в шарпе не совсем тоже самое, что синглтон. Тонкость в том, что до первой попытки получения инстанса синглтона не будет существовать его экземпляр, т.е. и память под него не будет выделена до первого обращения. У шарповского статик класса, как я понимаю, будут существовать все его члены, т.к. они все статичны.
2. В MQL можно получить подобие шарпового статик класса, если абсолютно все члены и методы класса объявить статиками.
Но в любом случае 2 разных экземпляра программы MQL будут иметь разные наборы статиков. И синглтоны тоже у них будут разные.

 
vbymrf #:

Кто не указатель? 

Я могу еще ссылку закинуть https://www.mql5.com/en/code/30596

 Передает указатель. Его я и буду записывать в свою переменную. 

От перестановки названий смысл не меняется. У вас есть идеальный синглтон? В студию. 

С указателем в принципе фразу не понял.

class Singletone
{
public:
  static Singletone* instance()
  {
    if (_instance == NULL)
      _instance = new Singletone;
      
    return _instance;
  }
private: 
  Singletone() {}
 ~Singletone() {}
 
  static Singletone* _instance;
};

Singletone* Singletone::_instance = NULL;

В любом месте, где нужно его использовать, делаете

Singletone* singletone = Singletone::instance();

и пользуетесь им сколько душе угодно, при этом, никаких ошибок указателей не будет. Если вам нужно пользоваться им в классе то:

class SingletoneUser
{
public:
  SingletoneUser()
    : _singletone(Singletone::instance())
  {
  }

  foo()
  {
    _singletone.some_singletone_function();
  }
private:
  Singletone* _singletone;
};

В чем проблема? Лучше этого, для вашей задачи ничего не придумали.

По поводу библиотек - у вас по всей видимости, идет путаница в голове. 

 

Похоже на то


По поводу библиотек - у вас по всей видимости, идет путаница в голове.