Может и не нужон он - интернет ваш перегруженный по дефолту оператор присваивания для классов?😄
Кому нужон - пусть сам себе явно перегрузит😄
Так ведь получше будет - уже не компилируется откровенная ерунда:
class A
{
public:
voidoperator=(const A&)=delete;
};
voidOnStart()
{
A object = new A(); // attempting to reference deleted function 'void A::operator=(const A&)'
}
А в других языках тоже оператор присваивания для классов перегружается по дефолту (вопрос к тем, кто программирует на других языках)?
[EDIT]
Для структур то оно нормально - у них указателей нет.
А вот в случае с классами это препятствует дополнительным проверкам со стороны компилятора
В отличие от C++, переменная hobject из вышеприведенного примера не является указателем на память, а является дескриптором объекта. Кроме того, в языке MQL5 все объекты в параметрах функции обязательно должны передаваться по ссылке.
Структуры, классы и интерфейсы - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Там (тут) хорошие примеры по передаче объектов в функцию.
Но я не понимаю, почему не упомянуто про передачу указателя в качестве простого типа - без ссылки. Именно так делаю, когда нужно хранить копию указателя:
class A {};
class B
{
private:
const A* m_ptr;
public:
void initialize(const A* ptr)
{
m_ptr = ptr;
}
};
voidOnStart()
{
A* a1 = new A;
A a2;
B b;
b.initialize(a1); // когда POINTER_DYNAMIC
b.initialize(GetPointer(a2)); // когда POINTER_AUTOMATICdelete a1;
}
В подобных случаях считаю, что такой вариант лучше, чем передача по ссылке.
Потому, что если метод принимает объект по ссылке, а сам объект изначально с POINTER_DYNAMIC, то получается + 2 излишних преобразования (указатель -> объект -> указатель):
class A {};
class B
{
private:
const A* m_ptr;
public:
void initialize(const A& ptr)
{
m_ptr = GetPointer(ptr); // #2 объект -> указатель
}
};
voidOnStart()
{
A* a1 = new A;
B b;
b.initialize(a1); // #1 указатель -> объектdelete a1;
}
Лично я долго передавал по ссылке, а потом получал указатель. Потому, что не знал, что можно просто передать указатель.
class A {
protected:
enum { x1 };
staticint x2;
};
int A::x2;
voidOnStart()
{
Print( A::x1 ); //(1)//нормально ???
Print( A::x2 ); //(2)//Error: cannot access to protected member 'x' declared in class 'A'
}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Может и не нужон он - интернет ваш перегруженный по дефолту оператор присваивания для классов?😄
Кому нужон - пусть сам себе явно перегрузит😄
Так ведь получше будет - уже не компилируется откровенная ерунда:
А в других языках тоже оператор присваивания для классов перегружается по дефолту (вопрос к тем, кто программирует на других языках)?
[EDIT]
Для структур то оно нормально - у них указателей нет.
А вот в случае с классами это препятствует дополнительным проверкам со стороны компилятора
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
Vladislav Boyko, 2024.01.24 19:11
Где про этот синтаксис почитать?
Такой синтаксис используется в C++ для удаления конструктора по-умолчанию, например. Можно глянуть здесь.
Где про этот синтаксис почитать?
Нет якоря на странице, чтобы прям на этот раздел ссылку дать.
Перейдите по этой ссылке:
https://www.mql5.com/ru/docs/basis/types/classes#final_class
И скрольте вверх, там будет заголовок "Спецификатор delete":
всё ок...
указатель в mql это не указатель в C++. Вообще принципиально разные вещи и ближе к syntax sugar
вас попутывает A1-- :-)
Если путаю, то укажите конкретно где и что я путаю, а если не можете указать, то нечего понапрасну балаболить
В документации про это прямо сказано:
Нет якоря на странице, чтобы прям на этот раздел ссылку дать.
Перейдите по этой ссылке:
https://www.mql5.com/ru/docs/basis/types/classes#final_class
И скрольте вверх, там будет заголовок "Спецификатор delete":
https://www.mql5.com/ru/docs/basis/types/classes#delete
Спасибо!
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
Yuriy Bykov, 2024.01.24 21:06
В документации
Там (тут) хорошие примеры по передаче объектов в функцию.
Но я не понимаю, почему не упомянуто про передачу указателя в качестве простого типа - без ссылки. Именно так делаю, когда нужно хранить копию указателя:
В подобных случаях считаю, что такой вариант лучше, чем передача по ссылке.
Потому, что если метод принимает объект по ссылке, а сам объект изначально с POINTER_DYNAMIC, то получается + 2 излишних преобразования (указатель -> объект -> указатель):
Лично я долго передавал по ссылке, а потом получал указатель. Потому, что не знал, что можно просто передать указатель.
А какая принципиальная разница?
Вопрос по сайту. При попытке прикрепить ex4 в работе выскакивает ошибка:
Что это может означать?