Конструктор - копирование - Большая Энциклопедия Нефти и Газа, статья, страница 2
Единственное, о чем я прошу - дайте мне шанс убедиться, что деньги не могут сделать меня счастливым. Законы Мерфи (еще...)

Конструктор - копирование

Cтраница 2


Программа 4.22 представляет собой реализацию конструктора копирования, перегруженной операции присваивания и деструктора для реализации очереди на базе связного списка из программы 4.14. Деструктор проходит по всей очереди и с помощью delete освобождает память, распределенную под каждый узел.  [16]

За счет помещения в класс конструктора копирования, перегруженной операции присваивания и деструктора ( аналогично тому, как это делается в программе 4.22), можно превратить любой класс языка C в АТД первого класса. Эти функции обычно действуют по принципу простого обхода структур данных.  [17]

Если операция поэлементного копирования, выполняемая конструктором копирования, сгенерированным компилятором, не подходит для создаваемого класса, но необходимо инициализировать новые объекты с помощью существующих объектов того же типа, то определите собственный конструктор копирования. Например, класс CMessage, рассмотренный выше в этой главе, нельзя инициализировать, используя простое копирование членов класса, так как он содержит переменные, являющиеся указателями на блок памяти.  [18]

Реализация АТД Очередь в программе 4.22 имеет конструктор копирования, который исправляет этот дефект. Во внутреннем цикле for эта реализация каждый раз делает соответствующую копию для объекта q и полагается на то, что ее деструктор позволит системе освободить память, занятую копиями.  [19]

Инициализация объекта Мопеу2, как и МопеуЗ, вызывает конструктор копирования, сгенерированный компилятором.  [20]

Первый элемент ( Money-Table [0]) инициализируется существующим объектом класса CCurrency с помощью конструктора копирования; второй - инициализируется конструктором, создающим временный объект класса Ccurrency ( затем данный объект используется для инициализации элемента массива также конструктором копирования); третий - инициализируется константой типа long с помощью конструктора преобразования с параметром типа long; четвертый - константой типа double с помощью другого конструктора преобразования. Последний элемент массива инициализируется неявно; следовательно, для него компилятор вызывает конструктор по умолчанию.  [21]

В листингах 6.1 и 6.2 приведены окончательные версии классов CCurrency и CMessage, в том числе новые конструкторы копирования и преобразования.  [22]

Так как компилятор вызывает конструктор копирования каждый раз при передаче объекта класса в функцию, объект класса нельзя передавать как первый параметр в сам конструктор копирования. Напротив - необходимо передать ссылку на него.  [23]

Если операция поэлементного копирования, выполняемая конструктором копирования, сгенерированным компилятором, не подходит для создаваемого класса, но необходимо инициализировать новые объекты с помощью существующих объектов того же типа, то определите собственный конструктор копирования. Например, класс CMessage, рассмотренный выше в этой главе, нельзя инициализировать, используя простое копирование членов класса, так как он содержит переменные, являющиеся указателями на блок памяти.  [24]

Первый элемент ( Money-Table [0]) инициализируется существующим объектом класса CCurrency с помощью конструктора копирования; второй - инициализируется конструктором, создающим временный объект класса Ccurrency ( затем данный объект используется для инициализации элемента массива также конструктором копирования); третий - инициализируется константой типа long с помощью конструктора преобразования с параметром типа long; четвертый - константой типа double с помощью другого конструктора преобразования. Последний элемент массива инициализируется неявно; следовательно, для него компилятор вызывает конструктор по умолчанию.  [25]

Конструктор копирования класса имеет единственный параметр, представляющий собой ссылку на существующий объект того же класса. Если конструктор копирования не определен, компилятор сгенерирует его автоматически.  [26]

Однако, когда некоторые данные-члены являются указателями, эффект от выполнения функций, используемых по умолчанию, окажется совершенно другим. В операции присваивания конструктор копирования, используемый по умолчанию, делает копию указателей, но действительно ли это то, что нам требуется. Это важный вопрос семантики копирования, который необходимо задавать себе при проектировании любого АТД. Или, если говорить более широко, вопрос управления памятью является решающим, когда при разработке программного обеспечения используются АТД. Далее приводится пример, который поможет осветить эти вопросы более детально.  [27]

B-uepesbeitr которая нключает в себя деструктор, конструктор копирования и псрегру венную операцию при сваи вн и и ч и поддерживает JOiiepuiiEtH construct, cttunt.  [28]

В ходе выполнения перегруженных операций и создаются новые полиномы, поэтому данная реализация связана с утечкой памяти. Утечку памяти можно легко ликвидировать, добавляя в реализацию конструктор копирования, перегруженную операцию присваивания и деструктор.  [29]

Есть возможность модернизировать реализацию класса Очередь FIFO из программы 4.14 и превратить этот тип данных в принадлежащий первому классу. Для этого в класс потребуется добавить приведенные ниже реализации конструктора копирования, перегруженной операции присваивания и деструктора. Эти функции перекрывают функции, используемые по умолчанию, и вызываются, когда необходимо копировать или уничтожать объекты.  [30]



Страницы:      1    2    3