Вопросы по ООП в MQL5 - страница 85

 
вообще уже не первый раз ловлю себя на мысли, что в MQL ООП лучше использовать только в случае острой необходимости и только в конкретном участке кода.
 
Pavel Verveyko:
вообще уже не первый раз ловлю себя на мысли, что в MQL ООП лучше использовать только в случае острой необходимости и только в конкретном участке кода.
Это кто же Вам такую глупость внушил? Если Вы не любите кошек - значит Вы просто не умеете их готовить)))
 

где то читал, да и вот на форуме появился пример с такой конструкцией

delete &this;

простой пример может кто сделать с этим ?

интересует вопрос, что удаляет этот delete &this;

 
Igor Makanu:

где то читал, да и вот на форуме появился пример с такой конструкцией

простой пример может кто сделать с этим ?

интересует вопрос, что удаляет этот delete &this;

Сам себя удаляет)))

 
Vladimir Simakov:

Сам себя удаляет)))

это логично

но подозреваю, что весь смысл - использование со статическими методами

тестить нужно, правда не придумал как, вот и спросил


UPD: вчера бегло гуглил эту тему, много упоминаний на приватный деструктор, тож подумать нужно, что это дать может

 
Igor Makanu:

1) но подозреваю, что весь смысл "delete &this;" - использование со статическими методами
2) вчера бегло гуглил эту тему, много упоминаний на приватный деструктор, тож подумать нужно, что это дать может

1) Из статических методов запрещен доступ к this.
Где приметяют "delete &this;" - https://stackoverflow.com/questions/447379/what-is-the-use-of-delete-this

2) Приватный дестуктор запрещает создавать объект на стеке, однако по прежднему через оператор new объект можно создать, на этот раз в куче:

class A{
   ~A(){printf(__FUNCSIG__);}
public:
    void Delete(){
        delete &this;
    }
};

void OnStart() {
   A* a_ptr = new A();
   a_ptr.Delete();
}

Вот вам и еще одно исопльзование delete &this.

 
Sergey Dzyublik:

1) Из статических методов запрещен доступ к this.
Где приметяют "delete &this;" - https://stackoverflow.com/questions/447379/what-is-the-use-of-delete-this

2) Приватный дестуктор запрещает создавать объект на стеке, однако по прежднему через оператор new объект можно создать, на этот раз в куче:

Вот вам и еще одно исопльзование delete &this.

Что-то с чем-то всегда можно сделать. А смысл?

Надо бы придумать название, объявить это паттерном проектирования... и вот тогда. Это же так круто - вместо одного "delete что-то" написать кучу кода.

 
А приватный деструктор защищает ваши наработки от лохов-дилетантов. Ведь с ними ООП можно использовать только по-взрослому - с new и delete. Кстати, а название "паттерну" придумали уже?
 
Dmitry Fedoseev:
У тебя реально очень подходящий ник ))
 
Igor Makanu:

где то читал, да и вот на форуме появился пример с такой конструкцией

простой пример может кто сделать с этим ?

интересует вопрос, что удаляет этот delete &this;

this - это указатель на текущий объект.

Обычно конструкция delete this применяется там, где объект создан по new, но ответственность за удаление лежит на самом объекте. В этом случае, когда объект решает, что он больше не нужен, он вызывает функцию деиницализации, в которой удаляет самого себя таким вот образом.

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

На мой взгляд, ответственность за удаление должно лежать на том же объекте, который создал. При создании он может пользоваться паттерном фабрики объектов, но удаление - все равно должно быть в ведении объекта, создавшего новый объект.