Форум программистов, компьютерный форум CyberForum.ru

Оператор new - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ #include <iostream> Очень Подробно =) http://www.cyberforum.ru/cpp-beginners/thread646781.html
Помогите пожалуйста, добрые люди :cry: Вот такая вот проблема .... искал инфу повсюду, но к сожалению она минимальна. Что такое <iostream>? В Википедии написано, что это файл, который содержит классы и функции... 1. Сразу вопрос он реально существует (такой файл) ? 2. Как язык С++ переводит команды на низкие уровни? То есть в iostream получается лежит часть компилятора, который отвечает за...
C++ Попрошу разъяснить что означает : list , символ -> и как обратиться к переменным , которые заданы в структуре (inf , next). Добрый вечер. Попрошу помочь с следующим кодом : #include <cstdlib> #include <iostream> #include <list> using namespace std; struct { int inf; http://www.cyberforum.ru/cpp-beginners/thread646780.html
C++ Работа с классом и объектом Вектор
Являюсь студентом,и по долгу учебы приступил к обучению премудростям "оСей с двумя плюсами". И обломался. получил задание на создание массива - вектора и определенную его обработку Обязательными есть конструктор, деструктор; Необходимыми есть ввод, вывод элементов вектора; 3 функции обработки в соответствии с вариантом задания Функции вот такие
Новые прибабахи в 2012 C++
Вот получаю такую фиговину в новой студии 2012 1>c:\users\ramyb\documents\visual studio 2012\projects\detla\detla\detla.cpp(15): error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> c:\program files (x86)\microsoft visual studio...
C++ переустановка VS10 после VS12 http://www.cyberforum.ru/cpp-beginners/thread646701.html
установил VS кондидат поюзал, а душа просит старого. вот снес переустановил VS 10. а он работать не хочет... что делать выдает вот такие ошибки при запуске после компиляции. Зарание спасибо!
C++ floating point error int i = 124; int j = 0; "c" и "y" это float с диапазоном от 1 до 2; x это long double от 0.01 до 100; tempsum - long double; cr - long double; -------------------------------------------------------------------------- for(; i>0; i--, j++) { cr = *c - (stp1.mass.y); correctmul(&cr, &csp, stp1); tempsum += (cr * stp1.mass.x * 1000);} //<--- overflow в указанной строке... подробнее

Показать сообщение отдельно
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
04.09.2012, 23:15     Оператор new
Цитата Сообщение от Neon-z Посмотреть сообщение
Спасибо
У нас целый курс был по арзитектуре процессора. Но как это привязать к указателям?
наговорю много слов.
если ты пишешь где-то глобально
C++
1
Item itm;
, у тебя в определенном сегменте памяти предусматривается участок, где будет находиться itm. сгенерируется код, инициализирующий эту единицу. все ссылки к этой переменной будут фактически ссылками к этому куску памяти. если это - внутри некой ф-ии:
C++
1
2
3
void foo(){
Item itm;
...
, то там, где будет обращение к этой ф-ии, компилятор сгенерирует код, который выполнит примерно следующее: запихает в стек "точку возврата" (т.е. запомнит, откуда мы вызываем ф-ю), запихнет в стек объект типа Item (фактически изменит значение регистра стека на величину памяти, занимаемой объектом, инициализирует объект, вызовет его конструктор и перейдет к выполнению ф-ии. при возврате вызовет деструктор, "выпихнет" объект из стека (т.е. просто изменит значение регистра стека на размер освобождаемой памяти), выберет из стека "точку возврата", и передаст туда управление (я не описал возврат значения, но это нам сейчас неинтересно).
заметь, память под объект выделялась и освобождалась арифметическими действиями с регистром стека, что является примитивной операцией.
если использовать указатель, то все происходит иначе. как только что выделялась память под объект (или в оеределенном сегменте памяти, или в стеке), теперь выделится память только под указатель на объект (4 байта в 32-bit система). значение ему не присвоится "автоматически", и никакой объект не создастся. его нужно будет создать "ручками" (оператором new, прямо или косвенно), и затем не забыть эту память освободить и желательно указателю значение null присвоить.
оператор new - это запрос на выделение памяти из heap'а, обращение к операционной системе, требующее времени.
казалось бы, "никогда никаких дел с укзаателями!". но очень часто (действительно очень) искользование указатеей облегчает жизнь.
устал, пошел спать...
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru