|
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
|
|
Конструктор копирования при инициализации23.09.2015, 21:47. Показов 3251. Ответов 6
Метки нет (Все метки)
При инициализации одного объекта через другой вызывается конструктор копирования, под динамическую область памяти выделяется своя память.Вопрос такой алгоритм работы конструктора в этом случае:
1)Вызывает конструктор копирования и для динамической области выделяется своя область памяти. 2)Что же касается других данных они инициализируется значениями из кучи. Я прав?
0
|
|
| 23.09.2015, 21:47 | |
|
Ответы с готовыми решениями:
6
Конструктор копирования при инициализации в header файле Конструктор инициализации, конструктор копирования, деструктор Как написать конструкторы копирования, инициализации и конструктор без аргументов? |
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|
| 23.09.2015, 22:06 | |
|
Не особо понял этот поток сознания.
1) При инициализации объекта через my_class(bla-bla-bla), вызывается конструктор принимающий bla-bla-bla в качестве аргумента. В this ему подсовывается адрес памяти выделенной под объект. Откуда эта память взялась (динамическая память, стек, исчезли в соседней воинской части) - конструктор не колышет. 2) При инициализации объекта через new my_class(bla-bla-bla), вызывается operator new который рожает sizeof(my_class) свободной памяти. Как он ее родит - никого не колышет. Далее свободная память суется в this и смотри пункт 1. 3) Что означает "под динамическую область памяти выделяется своя память" я не знаю, но к вызову конструктора это никакого отношения не имеет.
0
|
|
|
-12 / 0 / 4
Регистрация: 04.10.2014
Сообщений: 272
|
||
| 23.09.2015, 22:13 [ТС] | ||
|
Инициализируем объект через другой - вызывается конструктор копирования, если были в классе типы данных с выделением динамической памяти, то через конструктор копирования для временного объекта выделяется своя область памяти.А если, допустим у меня классе есть статические данные,то они при инициализации заполняются значениями из кучи? То есть есть класс, в нем статические и динамические типы данных, инициалируем второй объект, через первый - вызывается конструктор копии, что с динамическим происходит данными - определено в конструкторе копии, с ними все ясно, а вот статические инициалируется значениями из кучи?понятен вопрос?
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 23.09.2015, 22:41 | |||
|
Если мы говорим о пользовательском конструкторе копирования, то по умолчанию он инициализирует поля с помощью конструктора по умолчанию. Если такового нет - ищет у поля конструктор с аргументами и ругается "аргументы дай". Если и конструктора с аргументами нет - плюет и оставляет в поле класса рандомный мусор, появившийся там не пойми откуда. Сам он этот мусор не вносит, это до него лежало.
0
|
|||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 24.09.2015, 06:28 | |
|
artart96, начнём с того, что, по сути, все поля класса изначально либо примитивные типы, которые копируются byte-to-byte, либо объекты, для которых вызывается конструктор копирования. То, что в классе может лежать указатель, ни на что не влияет, указатель сам по себе не означает динамически выделенный ресурс, это примитивный тип, который копируется побайтно. Он может указывать, например, на другое поле класса. Поэтому как распоряжаться с отдельными полями класса в конструкторе копирования, зависит только от программиста. Если указатель действительно указывает в кучу, вам нужно позаботиться об этом, выделив новую область памяти и скопировав туда значения из соответствующей памяти, принадлежащей копируемому объекту. Только надо помнить, что если вы заменяете дефолтный конструктор копирования, который по стандарту всегда есть в любом классе, на самописный, то все поля класса вам придётся инициализировать (копировать) вручную, иначе для них будет вызван конструктор по умолчанию (а за неимением оного вообще будет ошибка компиляции).
1
|
|
|
0 / 0 / 0
Регистрация: 17.01.2017
Сообщений: 4
|
||||||
| 18.05.2018, 22:28 | ||||||
|
Во-во-во, близко к моей проблеме....
В конструкторе копирования никак не хочет выделяться динам. память вылетает прога и все (
0
|
||||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 18.05.2018, 23:00 | |
|
В конструкторе с размером внутренняя size не изменяется. Измените.
1
|
|
| 18.05.2018, 23:00 | |
|
Помогаю со студенческими работами здесь
7
Конструктор копирования, деструктор при наследовании Конструктор копирования при разбиении файлов Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно? Почему не вызывается конструктор копирования при возврате объекта из функции Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|