// Вызов оператора копирования
y = x;
// Вызов оператора перемещения
z = std::move(y);
z = func();
Деструктор вызывается при выходе объекта из области видимости или
явном удалении оператором 'delete'.
Example x;
// глобальный объект, деструктор вызывается при
//
завершении программы
void f(Example e);
int main()
{
Example y;
// деструктор вызывается при выходе из main()
Example z = new Example();
f(y); // 'y
' передается по значению т.е. делается копия и для этого
//
вызывается конструктор копирования
delete z; //
вызов деструктора оператором 'delete' при уничтожении
//
динамического объекта
// деструктор также можно вызвать как обычный метод:
// 'z->~Example
();' или
//
так 'z->Example::~Example();'
}
// определение функции f
void f(Example obj)
{
// деструктор формального параметра 'obj'- копии фактического
//
параметра 'y' - будет вызван при выходе из функции.
Example x;
// деструктор локального объекта будет вызван при
//
выходе из функции
...
}
Конструктор может быть явным образом запрещен в классе.
Например,
можно явно запретить создание объектов без параметров инициализации и
запретить конструктор по умолчанию. Аналогично можно запретить операции
копирования и перемещения. Для этого используется ключевое слово 'delete' в
строго определенном контексте, отличающемся от
его использования для
удаления объекта. 'delete' может быть использован для любого метода.
Иногда возникает необходимость явно указать на использование
конструктора или оператора, создаваемых компилятором.
Для этого
70
используется ключевое слово 'default'. В примере ниже пользователь, создав
конструктор инициализации 'Example(double x, double y)',
уже не может
рассчитывать на то, что компилятор сгенерирует конструктор по умолчанию и
конструктор копирования. Чтобы все же ими воспользоваться, нужно явно
указать их использование признаком 'default'.
У конструкторов перемещения и инициализации
способов их задать по
умолчанию нет. Связано это с тем, что их невозможно однозначно определить
на основе декларации класса. При инициализации возможно использование
разнообразных параметров, при перемещении
- процедур очистки
перемещаемого объекта. С копированием и конструктором по умолчанию все
понятно: копирование объектов осуществляется побитово, инициализация по
умолчанию - нулями.
Конструктор может быть указан как вызываемый явным образом.
Do'stlaringiz bilan baham: