Рекомендуем, 2024

Выбор редакции

Разница между конструктором и деструктором

Иногда требуется инициализировать некоторую часть объекта, прежде чем его можно будет использовать. Например, мы работаем со стеком, прежде чем выполнять какое-либо действие, вершина стека всегда должна быть установлена ​​на ноль. Эта функция автоматической инициализации выполняется через «Конструктор». Вероятно, если объект должен выполнить некоторый код, прежде чем он будет уничтожен. Например, если объект должен закрыть файл, который он открыл, перед его уничтожением. Это может быть выполнено с помощью «Деструктора».

Давайте рассмотрим некоторые основные различия между конструктором и деструктором с помощью сравнительной таблицы

Сравнительная таблица:

Основа для сравненияКонструкторDestructor
Цель
Он выделяет память для объекта.Это освобождает память об объекте.
декларацияимя_класса (если есть аргументы) {};~ имя_класса (без аргументов) {};
аргументыКонструктор принимает аргументДеструктор не принимает никаких аргументов.
призваниеКонструктор вызывается автоматически при создании объекта.Деструктор вызывается автоматически при выходе из блока или завершении программы.
За работойКонструктор позволяет объекту инициализировать часть своего значения до того, как он будет использован.Деструктор позволяет объекту выполнять некоторый код во время его уничтожения.
Порядок исполнения
Конструктор вызывается в последовательном порядке.
Деструктор вызывается в обратном порядке конструктора.
В цифрахВ классе может быть несколько конструкторов.Но в классе всегда есть один деструктор.
Копировать конструкторКонструктор копирования позволяет конструктору объявлять и инициализировать объект из другого объекта.Нет такой концепции.
Над загрузкойКонструкторы могут быть перегружены.Деструктор не может быть перегружен.

Определение конструктора:

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

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

Конструкторы также могут быть определены с аргументами по умолчанию. Принимая во внимание, что они также инициализируют объект «динамически». Конструкторы не могут быть ни наследуемыми, ни виртуальными, но могут быть перегружены. Они не могут быть переданы по их адресу.

Реализация конструктора:

 класс Const {int a, b; public: Const () {// конструктор без параметра a = 0; б = 0; } Const (int c, int d) {// конструктор с параметром a = c; с = д; }}; int main () {Const C1; С2 (10, 20); // этот оператор вызывает конструктор} 

При создании C1 выполняется конструктор без параметров, поскольку C1 не передает никаких параметров. Принимая во внимание, что, когда C2 создан, конструктор с параметром выполняется, поскольку он передает два целых числа конструктору.

Определение деструктора:

Деструктор также является функцией-членом класса, который освобождает память, выделенную для объекта. Он определен с тем же именем, что и имя класса, перед которым стоит символ тильды (~). Деструкторы всегда вызываются в обратном порядке конструкторов.

В классе всегда есть один деструктор, так как он не принимает никаких аргументов. Локальные объекты уничтожаются, как только контроль над исполнением оставляет блок; с другой стороны, глобальные объекты уничтожаются, когда завершается вся программа. Деструктор неявно вызывается компилятором. Если классы наследуются, и класс является производным от родительского класса, и у дочернего класса, и у родительского класса есть деструкторы; затем сначала вызывается деструктор производного класса, а затем деструктор родительского класса.

Реализация деструктора:

 класс Const {int a, b; public: Const (int c, int d) {// конструктор с параметром. а = с; с = д; cout << "значения a и b равны" < 

Когда создается объект C1, вызывается конструктор с двумя параметрами целочисленного типа и инициализируется член «a, b», а также выводятся значения «a, b». После этого вызывается деструктор и выводится сообщение «объект C1 уничтожен».

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

  1. Основная цель конструктора - выделить память объектам при их создании, тогда как основная цель деструктора - освободить память объекта при его разрушении.
  2. Конструктор может принимать аргументы, так как аргументы могут быть использованы для инициализации членов данных класса. Деструктор не принимает никаких аргументов, поскольку его единственной работой является освобождение памяти объекта.
  3. Конструктор вызывается при создании объекта. С другой стороны, деструктор вызывается, когда программа завершается или программа выходит из блока, в котором создан объект.
  4. Конструктор обычно используется для инициализации членов данных класса, тогда как деструктор используется, чтобы позволить объекту выполнить какое-либо действие до его уничтожения.
  5. Конструкторы выполняются в последовательном порядке, что означает, что если есть производный класс, который наследует базовый класс, и объект производного класса создается, то он сначала вызовет конструктор базового класса, а затем конструктор производного класса. С другой стороны, сначала вызывается деструктор производного класса, а затем базовый класс, это означает, что деструктор выполняется в обратном порядке конструктора.
  6. В классе может быть несколько конструкторов, которые определяются числом переданных аргументов. В классе есть только один деструктор.
  7. Существует концепция конструктора копирования, которая позволяет объекту инициализироваться из другого объекта, тогда как деструктор не имеет такой концепции.
  8. Конструкторы могут быть перегружены для выполнения различных действий под именем одного и того же конструктора, тогда как деструкторы не могут быть перегружены.

Заключение:

Помимо сходства, этот конструктор и деструктор являются специальной функцией-членом класса и имеют одно и то же имя, основное различие между ними заключается в том, что «конструктор» вызывается во время выделения памяти, а «деструктор» вызывается в время освобождения памяти объектов. И конструктор, и деструктор неявно вызываются компилятором, даже если они не определены в классе.

Top