Особенности языка mql5, тонкости и приёмы работы - страница 283

 
fxsaber #:

Не понял.

https://www.mql5.com/ru/forum/1111/page3600#comment_55388475

Неявный - тот, который вы не объявляли, а компилятор сам сгенерировал его для вас. MQL компилятор так не умеет.

https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D0%BE%D1%80_%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F

Обычно компилятор автоматически создает конструктор копирования для каждого класса (известные как неявные конструкторы копирования, то есть конструкторы копирования, заданные неявным образом), но в некоторых случаях программист создает конструктор копирования, называемый в таком случае явным конструктором копирования (или «конструктором копирования, заданным явным образом»). В подобных случаях компилятор не создает неявные конструкторы.

Следующие примеры иллюстрируют работу конструкторов копирования и их необходимость.

#include <iostream>

class Person
{
    public:
        int age;
        Person(int age) : age(age) {}
};

int main()
{
    Person timmy(10);
    Person sally(15);

    Person timmy_clone = timmy;
 
    std::cout << timmy.age << " " << sally.age << " " << timmy_clone.age << std::endl;
 
    timmy.age = 23;
 
    std::cout << timmy.age << " " << sally.age << " " << timmy_clone.age << std::endl;
}

Как и ожидалось, timmy скопировался в новый объект timmy_clone. При изменении возраста (age) timmy, у timmy_clone возраст не менялся: объекты полностью независимы.

Компилятор сгенерировал для нас конструктор копирования, который может быть записан примерно так:

Person(Person const& copy)
  : age(copy.age) {}

 
Vladislav Boyko #:

https://www.mql5.com/ru/forum/1111/page3600#comment_55388475

Неявный - тот, который вы не объявляли, а компилятор сам сгенерировал его для вас. MQL компилятор так не умеет.

Сложности только при const-полях?

 
fxsaber #:

Сложности только при const-полях?

Да, недостаток operator= заключается в том, что вы не можете использовать его для const полей (лично у меня больше половины объектов содержат const поля). А конструктор копирования придется объявлять самостоятельно (в отличии от operator=).