Ошибки, баги, вопросы - страница 1784
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ошибка при выполнении: EX5 loading failed
typedef void (*f)( A*);
class A {
virtual void g( A *a ) {}
f ff;
};
void OnStart() { Print( __FUNCTION__ ); }
Ошибка при выполнении
void f( B* );
class A { public:
virtual ~A() { f((B *)&this ); } //(*)
virtual void g( A* ) { Print( __FUNCTION__ ); }
};
class B : public A { public:
virtual void g( A* ) { Print( __FUNCTION__ ); }
};
void f( B *b ) { b.g( b ); }
void OnStart() //(1)
{
B *b = new B;
delete b;
}
Результат: incorrect casting of pointers in (*)
А если
то результат: B::g
а в чем принципиальная разница между OnStart (1) и (2) ???
Кроме того результат подобного кода в С++: A::g
A100:
Для чего может быть нужен виртуальный деструктор, как в Вашем примере выше? Разве его можно переопределить в потомке?
Для чего может быть нужен виртуальный деструктор, как в Вашем примере выше? Разве его можно переопределить в потомке?
В MQL он всегда виртуальный, даже если это не указано явно
Так Вы на вопрос не ответили - для чего?
Если в MQL все деструкторы виртуальные, то вопрос для чего нужен виртуальный деструктор сводится в вопросу для чего нужен деструктор? А это слишком общий вопрос
Знаю, для чего нужен деструктор. Мне непонятно, для чего перед его определением прописывать слово virtual?
Приписка мне нужна для совместимости кода с С++, поскольку там деструкторы различаются
Знаю, для чего нужен деструктор. Мне непонятно, для чего перед его определением прописывать слово virtual?
Виртуальные функции и деструктор >>>
Основное правило: если у вас в классе присутствует хотя бы одна виртуальная функция, деструктор также следует сделать виртуальным. При этом не следует забывать, что деструктор по умолчанию виртуальным не будует, поэтому следует объявить его явно. Если этого не сделать, у вас в программе почти наверняка будут утечки памяти (memory leaks). Чтобы понять почему, опять же много ума не надо. Рассмотрим несколько примеров.