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

 

Вероятно потому что Вы вызываете его вручную в функции OnStart().

Деструкторы статических объектов вызываются после этой функции в порядке обратном объявлению.

 
Koldun Zloy:

Вероятно потому что Вы вызываете его вручную в функции OnStart().

Деструкторы статических объектов вызываются после этой функции в порядке обратном объявлению.

Вроде, здесь же все корректно должно работать
template <typename T>
struct PTR
{
  T* Ptr;
  
  PTR( void )
  {
  }
  
  void operator =( T* &Value )
  {
    this.Ptr = Value;
  }
  
  ~PTR( void )
  {
    Print(__FUNCSIG__);
    delete this.Ptr;
  }
};

class CLASS
{
private:
  static PTR<CLASS> Ptr;
  static CLASS* Tmp;
  
  CLASS()
  {
    CLASS::Ptr = CLASS::Tmp;
  }
};

static PTR<CLASS> CLASS::Ptr;
static CLASS* CLASS::Tmp = new CLASS;

void OnStart()
{
}

Но утечка происходит. Где собака порылась?

 
fxsaber:
Вроде, здесь же все корректно должно работать

Но утечка происходит. Где собака порылась?


Вы создаёте два объекта, а удаляете только один.

Зачем Вам нужен объект CLASS::Tmp?

 
Koldun Zloy:


Вы создаёте два объекта, а удаляете только один.

В каком месте создается два объекта?

Зачем Вам нужен объект CLASS::Tmp?

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

Скрытые же объекты со скрытыми конструкторами бывают логичны в некоторых случаях (наверное, самый нагядный).

 

Да, я ошибся. У Вас создаётся только один объект и не удаляется.

Так как, когда Вы Вызываете конструктор

  CLASS()
  {
    CLASS::Ptr = CLASS::Tmp;
  }

CLASS::Tmp ещё содержит мусор, а не адрес объекта.

 
1) Создается структура static PTR<CLASS> CLASS::Ptr;
2) Создается класс, new CLASS; отрабатывает конструктор CLASS()и CLASS::Ptr присваивается Null 
3) Обновляется значение CLASS::Tmp указателем на new CLASS
4) Удаляется структура PTR<CLASS> CLASS::Ptr, отрабатывает деструктор, пытается удалить CLASS::Ptr (а он Null)
 
Koldun Zloy:

CLASS::Tmp ещё содержит мусор, а не адрес объекта.

Спасибо! Как-то не узрел этой очевидности.

Sergey Dzyublik:
1) Создается структура static PTR<CLASS> CLASS::Ptr;
2) Создается класс, new CLASS; отрабатывает конструктор CLASS()и CLASS::Ptr присваивается Null 
3) Обновляется значение CLASS::Tmp указателем на new CLASS
4) Удаляется структура PTR<CLASS> CLASS::Ptr, отрабатывает деструктор, пытается удалить CLASS::Ptr (а он Null)

Спасибо. Только не Null, а мусор.

 

Было бы хорошо, если бы в режиме

ChartSetInteger( 0,CHART_SHOW,false );

не отображались стрелки от торговых операций (входы/выходы). Ни к чему они там совершенно.

 
Ребят, вопрос не в тему, я новичок, хотел бы заказать работу, на щас на балансе 0, я могу открыть тему? или надо пополнить счет в начале? немного не понял когда блокируют со счета деньги...
 
The service is unavailable.
Ушёл за настойкой валерьяны...(
Причина обращения: