Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.81
Neon-z
46 / 41 / 8
Регистрация: 06.09.2010
Сообщений: 419
#1

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

04.09.2012, 20:23. Просмотров 3519. Ответов 26
Метки нет (Все метки)

Приветствую. Есть такой вопрос.
Почему одни программисты используют оператор new, а другие нет?
Ведь если создавать объект этими способами
C++
1
2
3
4
5
class test { /* code */ }
void test_function(){
      test varr; // 1 способ
      test varrr= new test(); // 2 способ
}
они оба корректны. Но чем они отличаются?

p>S. на java все надо создавать (массивы, объекты) через оператор new, а тут такой выбор. Объясните плиз нубу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2012, 20:23
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Оператор new (C++):

Условный оператор, оператор ввода/вывода; плоскость и принадлежность точки
Здравствуйте. В С++ я абсолютный новичок, поэтому с первым же заданием возникли...

Написать программу, содержащую оператор оператор for для счета от 2 до 5 через 1
В С++ я ноль, помогите пожалуйста написать прогу Написать программу,...

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор *
Помогите в следующем: Для класса шаблона следует перегрузить оператор...

Для чего нужен оператор двоеточие, если два двоеточия - это оператор расширения области видимости
для чего нужен оператор двоеточие ( : ), если два двоеточия( :: ) - это...

Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не использовать. Значение m и n вводить с клавиатуры.
Применяя оператор цикла FOR вычислить y. Оператор if в теле цикла не...

Почему обращение к методам осуществляется через оператор прямого доступа, а не через оператор указателей->?
#include <iostream> using namespace std; class random { public: void...

26
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
04.09.2012, 22:30 #21
Цитата Сообщение от lazybiz Посмотреть сообщение
Обычно (если не всегда) хэндл - это и есть указатель.
нет. указатель - это (по определению) адрес памяти, где находится то, на что указатель. а хэндл - это типа "пульта управления" от чего-то. это не обязательно адрес памяти. это может быть, например, индекс в таблице таких адресов, или индекс в таблице, где содержатся некие структуры, описывающие items, ... в общем, что угодно, позволяющее как-то работать с объектом.

Добавлено через 1 минуту
Цитата Сообщение от alex_x_x Посмотреть сообщение
ну int *pI = new int() гарантирует инициализацию нулем значения *pI
хотя явней конечно int *pI = new int(0);
даже не знаю, наверное, если ты так говоришь, то это так и есть . но это - слабый аргумент в пользу использования таких выкрутасов (ты ведь сам такое не делаешь?).

Добавлено через 4 минуты
Цитата Сообщение от Neon-z Посмотреть сообщение
Если честно, я с указателями скоко не боролся - так понять полностью не могу. Книг 10 использовал, искал где понятнее, на форумах спрашивал. Но так и не понял их. Мож я глупый, мож еще что то
попробуй почитать какую-нибудь простенькую книжку по языку ассемблера. каксаемо любого процессора. конечно, семейство 8080 предпочтительно, но не принципиально. книжку выбирая, полистай просто, имеются ли там картинки-графики, иллюстрирующие сущность регистров, стека, работу команд. просто полистай, почитай как роман, не стремись понять каждую козулю, посмотри эти картинки. и многое станет казаться проще.
1
castaway
Эксперт С++
4927 / 3034 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
04.09.2012, 22:41 #22
Цитата Сообщение от novi4ok Посмотреть сообщение
нет
Да. Обычно это указатель на структуру/класс.

Цитата Сообщение от novi4ok Посмотреть сообщение
указатель - это (по определению) адрес памяти, где находится то, на что указатель.
Я знаю что такое указатель по-определению, и по сути.
По-определению, в языке С/С++ хэндла нет вообще.

Цитата Сообщение от novi4ok Посмотреть сообщение
это может быть, например, индекс в таблице таких адресов, или индекс в таблице
Я сказал "обычно" (хоть ни разу и не видел чтобы он использовался в качестве индекса).
Пример был бы кстати (хоть и не изменил бы мое мировоззрение на хэндлы).
1
Neon-z
46 / 41 / 8
Регистрация: 06.09.2010
Сообщений: 419
04.09.2012, 22:45  [ТС] #23
Спасибо
У нас целый курс был по арзитектуре процессора. Но как это привязать к указателям?
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
04.09.2012, 22:46 #24
Цитата Сообщение от lazybiz Посмотреть сообщение
Я сказал "обычно" (хоть ни разу и не видел чтобы он использовался в качестве индекса).
Пример был бы кстати (хоть и не изменил бы мое мировоззрение на хэндлы).
handle - это парадигма такая. в каждом конкретном случае нужно смотреть конкретно, что имеется ввиду. в общем случае это - нечто стандартное, обеспечивающее определенный доступ к чему-то.
1
castaway
Эксперт С++
4927 / 3034 / 453
Регистрация: 10.11.2010
Сообщений: 11,089
Записей в блоге: 10
Завершенные тесты: 1
04.09.2012, 22:57 #25
Это указатель. Парадигма тут не при чем. Индекс не логично называть хэндлом. Handle - это ручка (к примеру двери), что обычно связывают с указателем.
0
Toshkarik
1148 / 865 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
04.09.2012, 23:13 #26
Цитата Сообщение от novi4ok Посмотреть сообщение
даже не знаю, наверное, если ты так говоришь,
Явное указание конструктора по умолчанию для POD-типов, инициализирует их нулем. И тут не важно, знаете ли Вы, или нет. И это единственный способ инициализации массива нулями без цикла, который часто применяют.
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
04.09.2012, 23:15 #27
Цитата Сообщение от Neon-z Посмотреть сообщение
Спасибо
У нас целый курс был по арзитектуре процессора. Но как это привязать к указателям?
наговорю много слов.
если ты пишешь где-то глобально
C++
1
Item itm;
, у тебя в определенном сегменте памяти предусматривается участок, где будет находиться itm. сгенерируется код, инициализирующий эту единицу. все ссылки к этой переменной будут фактически ссылками к этому куску памяти. если это - внутри некой ф-ии:
C++
1
2
3
void foo(){
Item itm;
...
, то там, где будет обращение к этой ф-ии, компилятор сгенерирует код, который выполнит примерно следующее: запихает в стек "точку возврата" (т.е. запомнит, откуда мы вызываем ф-ю), запихнет в стек объект типа Item (фактически изменит значение регистра стека на величину памяти, занимаемой объектом, инициализирует объект, вызовет его конструктор и перейдет к выполнению ф-ии. при возврате вызовет деструктор, "выпихнет" объект из стека (т.е. просто изменит значение регистра стека на размер освобождаемой памяти), выберет из стека "точку возврата", и передаст туда управление (я не описал возврат значения, но это нам сейчас неинтересно).
заметь, память под объект выделялась и освобождалась арифметическими действиями с регистром стека, что является примитивной операцией.
если использовать указатель, то все происходит иначе. как только что выделялась память под объект (или в оеределенном сегменте памяти, или в стеке), теперь выделится память только под указатель на объект (4 байта в 32-bit система). значение ему не присвоится "автоматически", и никакой объект не создастся. его нужно будет создать "ручками" (оператором new, прямо или косвенно), и затем не забыть эту память освободить и желательно указателю значение null присвоить.
оператор new - это запрос на выделение памяти из heap'а, обращение к операционной системе, требующее времени.
казалось бы, "никогда никаких дел с укзаателями!". но очень часто (действительно очень) искользование указатеей облегчает жизнь.
устал, пошел спать...
0
04.09.2012, 23:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.09.2012, 23:15
Привет! Вот еще темы с решениями:

Оператор break как оператор go to next
Подскажите, в этом примере break эквивалентна действию оператора go to next?

Как перегрузить оператор<< и оператор>> ?
Доброго времени суток. Застрял на двух вопросах и не как не могу найти инфу...

В Delphi есть оператор cost i of. и т.д. Есть ли в C++ такой же оператор?
(C++ Builder XE5)

оператор while
На первой ферме имеется 1000 овец. Ежедневно количество овец на первой ферме...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru