Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Создание объектов
|
|||
|---|---|---|---|
|
#18+
Есть несколько простых вопросов которые хотелось бы уточнить (я новичёк в С++, делфист) :) Уточню, пишу под Arduino, может там немного иные принципы. Допустим у нас есть два определения: Код: plaintext 1. 2. По идее в первом случае one это указатель на объект? Во втором тогда two указатель на указатель на объект? Судя из примеров кода получается что в первом случае объект создаётся в момент инициализации? Если так, то уничтожится ли объект если я сделаю Код: plaintext 1. ? Снова, если он создаётся в первом случае автоматом тогда... Код: plaintext 1. 2. 3. Компилятор матерится на такой вариант. Помогите, плиз :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2013, 16:44 |
|
||
|
Создание объектов
|
|||
|---|---|---|---|
|
#18+
xneoПо идее в первом случае one это указатель на объект? Это у тебя дурная дельфийская идея. Нет, это не указатель, это сам объект, размещённый в стэке. И уничтожается он тогда же когда и все остальные локальные переменные - при выходе из блока где объявлен. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2013, 16:51 |
|
||
|
Создание объектов
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovxneoПо идее в первом случае one это указатель на объект? Это у тебя дурная дельфийская идея. Нет, это не указатель, это сам объект, размещённый в стэке. И уничтожается он тогда же когда и все остальные локальные переменные - при выходе из блока где объявлен. Тоесть, он создаётся в момент инициализации и размещается в стеке, так? Что произойдёт если я сделаю one = *two; ? Весь объект, на который указывает two , продублируется и перезапишет в стеке one ? Если они занимают по 300 байт, получается мы скопируем эти 300 байт, так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2013, 16:58 |
|
||
|
Создание объектов
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. Что произойдёт в последней строчке? Это ж не указатель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2013, 17:02 |
|
||
|
Создание объектов
|
|||
|---|---|---|---|
|
#18+
xneo Код: plaintext 1. 2. 3. Что произойдёт в последней строчке? Это ж не указатель. Зависит от конструктора класса ClassOne, если он не принимает NULL, то просто не скомпилируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2013, 17:05 |
|
||
|
Создание объектов
|
|||
|---|---|---|---|
|
#18+
просто не скомпилируетсяxneo Код: plaintext 1. 2. 3. Что произойдёт в последней строчке? Это ж не указатель. Зависит от конструктора класса ClassOne, если он не принимает NULL, то просто не скомпилируется. Не совсем понял причём тут конструктор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2013, 18:15 |
|
||
|
Создание объектов
|
|||
|---|---|---|---|
|
#18+
Допустим у нас есть два определения: Код: plaintext 1. 2. По идее в первом случае one это указатель на объект? Нет, это переменная типа "объект ClassOne" Во втором тогда two указатель на указатель на объект? Во втором — да. Судя из примеров кода получается что в первом случае объект создаётся в момент инициализации? Если так, то уничтожится ли объект если я сделаю Код: plaintext 1. ? Это недопустимая конструкция. Будет ошибка компиляции. Если two = NULL; объект все равно не удалится. Надо явно вызывать delete. Снова, если он создаётся в первом случае автоматом тогда... Код: plaintext 1. 2. 3. Компилятор матерится на такой [/quot] Правильно матерится. Что тв хотел сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2013, 01:15 |
|
||
|
Создание объектов
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovxneoПо идее в первом случае one это указатель на объект? Это у тебя дурная дельфийская идея. Нет, это не указатель, это сам объект, размещённый в стэке. И уничтожается он тогда же когда и все остальные локальные переменные - при выходе из блока где объявлен. Не факт, что объект на стеке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2013, 01:17 |
|
||
|
Создание объектов
|
|||
|---|---|---|---|
|
#18+
xneoпросто не скомпилируетсяпропущено... Зависит от конструктора класса ClassOne, если он не принимает NULL, то просто не скомпилируется. Не совсем понял причём тут конструктор? Конструктор и правда ни при чем. Компилятор будет искать оператор присваивания из void *. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2013, 01:20 |
|
||
|
Создание объектов
|
|||
|---|---|---|---|
|
#18+
Открывай учебник по C++ и учи. Отрывочные познания в виде ответов с форуме здесь не прокляпают. Размещение объектов на стеке очень удобно для локальных объектов (чтобы не вызывать delete). В этих ваших делфях, которые якобы создавались для разработки прикладных программ даже этого нет. То есть уровень обычного низкоуровневого С. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2013, 13:59 |
|
||
|
Создание объектов
|
|||
|---|---|---|---|
|
#18+
MasterZivПравильно матерится. Что ты хотел сделать? Я могу описать локальную переменную таким способом: Код: plaintext 1. 2. 3. Если я правильно понял, то при входе в метод(процедуру) эта переменная инициализируется вызывая конструктор и при выходе из процедуры уничтожается, вызывая деструктор (или нет?). Если так, то почему компилятор не даёт указать такую же переменную для класса? Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2013, 16:16 |
|
||
|
Создание объектов
|
|||
|---|---|---|---|
|
#18+
xneoпочему компилятор не даёт указать такую же переменную для класса? Потому что в классе это уже не переменная, а member, инициализация которого должна проводиться в конструкторе. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2013, 16:20 |
|
||
|
Создание объектов
|
|||
|---|---|---|---|
|
#18+
Теперь всё понятно, большое спасибо за ответы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2013, 16:23 |
|
||
|
Создание объектов
|
|||
|---|---|---|---|
|
#18+
xneoMasterZivПравильно матерится. Что ты хотел сделать? Я могу описать локальную переменную таким способом: Код: plaintext 1. 2. 3. Если я правильно понял, то при входе в метод(процедуру) эта переменная инициализируется вызывая конструктор и при выходе из процедуры уничтожается, вызывая деструктор (или нет?). Да, так. Если так, то почему компилятор не даёт указать такую же переменную для класса? Код: plaintext 1. 2. 3. Здесь два действия, объявление члена класса и инициализация. Объявление разрешено, а инициализация — нет, потому что конструкторы членов должны вызываться из конструкторов классов. Конструкторов много, потому и так заведено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2013, 18:57 |
|
||
|
Создание объектов
|
|||
|---|---|---|---|
|
#18+
xneo, Реомендую глянуть книгу Джефф Элджер "C++" Библиотека Программиста (чёрненькая, мягэнькая, формат А5 наверное - половинка А4) Она как бы с элементарных действий, но очень занимательна. Даёт понимание проблем, наталкивает на интересные решения, не так суха и не сильно замудренна. Если дочитаете до конца и проникнетесь - многие вопросы на этом форуме будут понятны, как и красивые способы их решений :) удачи вам (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2013, 05:42 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38467339&tid=2019862]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
163ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 266ms |

| 0 / 0 |
