AngelScript Help

Копирующий конструктор

Копирующий конструктор — это специальный конструктор, который позволяет создавать копию класса без создания промежуточного класса.

Без специального конструктора копирования с помощью конструктора по умолчанию будет создан новый экземпляр класса. Затем с помощью метода opAssign в него будут скопированы все значения свойств.

class A { string s; A(){ print("При создании экземпляра b в этом примере будет вызван [[[конструктор по умолчанию|constructor-default.html]]]"); } A(string s){ [[[this|this.html]]].s = s; } } void [[[main|main.html]]](){ A a("a"); A b = a; // Создаём копию класса print(a.s + b.s); // aa }

Конструктор копирования позволяет не создавать конструктора по умолчанию и вручную определить поведение при копировании.

class A { string s; A(){ print("При создании экземпляра b в этом примере НЕ будет вызван [[[конструктор по умолчанию|constructor-default.html]]]"); } A(string s){ [[[this|this.html]]].s = s; } // Явно объявляем конструктор копирования A([[[const|var.html#const]]] A [[[&inout|fun-arg-handle.html#inout]]] a) { s = a.s + "1"; // Добавим единичку, чтоб убедиться в вызове конструктора } } void [[[main|main.html]]](){ A a("a"); A b = a; // Создаём копию класса print(a.s + b.s); // aa1 }

delete

Конструктор копирования можно удалить используя ключевое слово delete.

class A { string s; A(){ print("При создании экземпляра b в этом примере будет вызван [[[конструктор по умолчанию|constructor-default.html]]]"); } A(string s){ [[[this|this.html]]].s = s; } // Удаляем конструктор копирования A([[[const|var.html#const]]] A [[[&inout|fun-arg-handle.html#inout]]]) delete; } void [[[main|main.html]]](){ A a("a"); A b = a; print(a.s + b.s); // aa }
Last modified: 16 October 2024