Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
45 / 45 / 1
Регистрация: 23.05.2009
Сообщений: 92

Внутреннее представление конструтора и деструктора

03.08.2009, 07:07. Показов 1844. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я знаю, что конструктор и деструктор в явном виде ничего не возвращает.
Однако на уровне ассемблерных команд он восстанавливает содержимое вершины стека(в регистр, ячейку памяти или сегментый регистр).
Какой тип в теории может возвращать конструктор и деструктор?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.08.2009, 07:07
Ответы с готовыми решениями:

Внутреннее представление числа в памяти
нужно сделать реализацию числа в памятиfloat d1 = 72.9e-8;... а как??? это нужно число перевести в двоичную систему, или как???

Перевод десятичного числа во внутреннее представление
Всем привет. Сделал программу перевода десятичного числа во внутреннее представление. Число лежит в диапазоне от -128 до 127 (тип char)....

Внутреннее представление типа Double через Long
Привет. Для оптимизации работы одного вычислительного алгоритма потребовалось найти некое биективное отображение Double <-> Long для...

15
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
03.08.2009, 08:00
Цитата Сообщение от Skirmisher Посмотреть сообщение
Однако на уровне ассемблерных команд он восстанавливает содержимое вершины стека(в регистр, ячейку памяти или сегментый регистр).
он инициализирует переменные.
в вершине стека всего лишь значения "по-умолчанию".
и, насколько я знаю, ничего конструктор не возвращает, даже на внутреннем уровне.
0
45 / 45 / 1
Регистрация: 23.05.2009
Сообщений: 92
03.08.2009, 08:53  [ТС]
Цитата Сообщение от Patch Посмотреть сообщение
он инициализирует переменные.
в вершине стека всего лишь значения "по-умолчанию".
и, насколько я знаю, ничего конструктор не возвращает, даже на внутреннем уровне.
Значит в теории он void.
0
125 / 123 / 0
Регистрация: 30.03.2009
Сообщений: 766
03.08.2009, 10:13
можно считать, что он возвращает ссылку на созданный объект. хорошо это видно, например, на таком примере
C++
1
myclass * e = new myclass(params);
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
03.08.2009, 10:17
Неверно. Здесь возвращает значение operator new, а вовсе не конструктор.
1
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
03.08.2009, 10:30
2CheshireCat: Оператор new и конструктор тесно связаны. Оператор new выделяет память, а конструктор заполняет выделенную память.
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.08.2009, 10:40
Цитата Сообщение от odip Посмотреть сообщение
2CheshireCat: Оператор new и конструктор тесно связаны. Оператор new выделяет память, а конструктор заполняет выделенную память.
конструктор не заполняет память, выделяемую под объект, он может инициализировать дополнительные (внутренние объекты) но сам по себе в память объекта он не лезет. Это метод, который вызывается уже после создания объекта.
достаточно посмотреть простой пример (в какой последовательности и что будет создаваться):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct CSomeStruct
{
// реализация
};
 
class CSomeClass
{
public:
    CSomeClass()
    {
        SomeStruct; // уже создана, 
        //т.е. this уже существует и под него уже выделена память
        pSomeStruct = new CSomeStruct;
     }
private:
    CSomeStruct SomeStruct;
    CSomeStruct *pSomeStruct;
};
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
03.08.2009, 10:44
C++
1
2
3
4
5
6
class ExampleClass {
public:
int value1;
 
ExampleClass() { value1= 5; }
};
Вот тебе конструктор, который заполняет память объекта - поле value1.

Добавлено через 57 секунд
Это метод, который вызывается уже после создания объекта
Что значит после создания объекта ?
А это как раз и значит, что память была выделена оператом new или компилятором.
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.08.2009, 10:49
Цитата Сообщение от odip Посмотреть сообщение

Вот тебе конструктор, который заполняет память объекта - поле value1.
он не заполняет память, он устанавливает значение, переменной. Память была выделена оператором new (либо на стеке) а только после этого вызван контруктор.
Добавлено через 57 секунд
Цитата Сообщение от odip Посмотреть сообщение
Что значит после создания объекта ?
А это как раз и значит, что память была выделена оператом new или компилятором.
выделяется кусок памяти поз объект оператом new и ничего больше, а дальше вызывается конструктор объекта.
поставь в моем примере брейкпоинты и пройди по шагам, и сразу поймешь в какой последовательности что вызывается.
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
03.08.2009, 10:52
odip,
Оператор new и конструктор тесно связаны.
struct Foo {};
Foo* foo = (Foo*) ::operator new (sizeof(Foo));
обозначь здесь связь, а то что-то не могу найти ...

а конструктор заполняет выделенную память.
Чем именно? То есть конструктор можно использовать как замену memset?
1
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
03.08.2009, 12:11
Цитата Сообщение от Rififi Посмотреть сообщение
Foo* foo = (Foo*) ::operator new (sizeof(Foo));
обозначь здесь связь, а то что-то не могу найти ...
Rififi, odip имел ввиду оператор new, а не функцию operator new
***
Рассмотрим на простом примере что происходит:
C++
1
2
// оператор new
string *sp = new string("hello");
Когда используется оператор new, выполняется 3 действия:
1) Выражение вызывает библиотечную функцию operator new(), резервирующую нетипизированную область памяти, достаточно большую, чтобы содержать объект указанного типа.
2) Чтобы создать объект на основании переданного инициализирующего значения, запускается конструктор соответствующего класса
3) Возвращается указатель на вновь созданный объект.

И для симметрии рассмотрим, что делает оператор delete
C++
1
delete sp;
1) Выполняется деструктор, соответствующий классу объекта, на который указывает указатель sp
2) Используемая объектом память освобождается при помощи библиотечной функции operator delete()
1
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
03.08.2009, 12:15
zim22,
Rififi, odip имел ввиду оператор new, а не функцию operator new
Собстна, это я и желал выяснить (Ж
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.08.2009, 13:27
2 zim22
если для объекта перегружен оператор, то он будет работать так как реализовано в перегрузке, иначе создается объект а потом вызывается конструктор (нет смысла вызывать конструктор (или любой другой нестатический метод), если this невалидный).
0
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
03.08.2009, 13:30
Цитата Сообщение от oxotnik Посмотреть сообщение
2 zim22
что вы хотели этим сказать? что я где-то ошибся? укажите на ошибку. я не понимаю смысл вашего сообщения.
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
03.08.2009, 13:46
Цитата Сообщение от zim22 Посмотреть сообщение
что вы хотели этим сказать? что я где-то ошибся? укажите на ошибку. я не понимаю смысл вашего сообщения.
то что (я не лазил в исходники stl) если есть
string::operator new(...)
то вызовется он с заложенной в нем логикой выделения и распределения памяти и вызовется конструктор там где он вызывается в теле string::operator new(...)
если нет, тогда выделится память под объект а потом вызовется конструктор
0
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
03.08.2009, 14:17
Цитата Сообщение от oxotnik Посмотреть сообщение
если есть string::operator new(...), то вызовется он с заложенной в нем логикой выделения и распределения памяти
логично
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.08.2009, 14:17
Помогаю со студенческими работами здесь

Неправильно отображает внутреннее представление типа double
Тип int отображается верно, а вот при double ошибка Для числа 5: int : 00000101 00000000 00000000 00000000 double: 00000101 00000000...

Внутреннее (машинное) представление данных двух типов
Разработать программу, которая выводит на экран внутреннее (машинное) представление данных двух типов:short int и long double. Обеспечить...

Работа с разными типами данных и внутреннее представление чисел
Уважаемые форумцы, помогите с такой задачкой: Суть задания: ввести с клавиатуры тип данных, из числа стандартных, предложенных Вами и...

Перевод даты из символьного формата во внутреннее представление и обратно
Разработать функцию, которая переводит дату из символьного формата «дд.мм.гггг» во внутреннее представление и обратно.Только чтобы не...

Программа показывающая внутреннее двоичное представление типа данных
Необходимо показать внутреннее двоичное представление типа данных, используя операции сдвига(<<,>>) и поразрядные логические...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru