powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Создание объектов
15 сообщений из 15, страница 1 из 1
Создание объектов
    #38467332
xneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть несколько простых вопросов которые хотелось бы уточнить (я новичёк в С++, делфист) :) Уточню, пишу под Arduino, может там немного иные принципы.

Допустим у нас есть два определения:
Код: plaintext
1.
2.
ClassOne one;
ClassOne *two;


По идее в первом случае one это указатель на объект?
Во втором тогда two указатель на указатель на объект?
Судя из примеров кода получается что в первом случае объект создаётся в момент инициализации? Если так, то уничтожится ли объект если я сделаю
Код: plaintext
1.
one = NULL;

?

Снова, если он создаётся в первом случае автоматом тогда...
Код: plaintext
1.
2.
3.
class MyClass {
  WebServer server(80);
};


Компилятор матерится на такой вариант.

Помогите, плиз :)
...
Рейтинг: 0 / 0
Создание объектов
    #38467337
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xneoПо идее в первом случае one это указатель на объект?
Это у тебя дурная дельфийская идея. Нет, это не указатель, это сам объект, размещённый в
стэке. И уничтожается он тогда же когда и все остальные локальные переменные - при выходе
из блока где объявлен.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создание объектов
    #38467339
xneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovxneoПо идее в первом случае one это указатель на объект?
Это у тебя дурная дельфийская идея. Нет, это не указатель, это сам объект, размещённый в
стэке. И уничтожается он тогда же когда и все остальные локальные переменные - при выходе
из блока где объявлен.


Тоесть, он создаётся в момент инициализации и размещается в стеке, так?
Что произойдёт если я сделаю one = *two; ? Весь объект, на который указывает two , продублируется и перезапишет в стеке one ? Если они занимают по 300 байт, получается мы скопируем эти 300 байт, так?
...
Рейтинг: 0 / 0
Создание объектов
    #38467343
xneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
ClassOne one;

one = NULL;


Что произойдёт в последней строчке? Это ж не указатель.
...
Рейтинг: 0 / 0
Создание объектов
    #38467347
xneo
Код: plaintext
1.
2.
3.
ClassOne one;

one = NULL;


Что произойдёт в последней строчке? Это ж не указатель.
Зависит от конструктора класса ClassOne, если он не принимает NULL, то просто не скомпилируется.
...
Рейтинг: 0 / 0
Создание объектов
    #38467377
xneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто не скомпилируетсяxneo
Код: plaintext
1.
2.
3.
ClassOne one;

one = NULL;


Что произойдёт в последней строчке? Это ж не указатель.
Зависит от конструктора класса ClassOne, если он не принимает NULL, то просто не скомпилируется.

Не совсем понял причём тут конструктор?
...
Рейтинг: 0 / 0
Создание объектов
    #38467562
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим у нас есть два определения:
Код: plaintext
1.
2.
ClassOne one;
ClassOne *two;



По идее в первом случае one это указатель на объект?

Нет, это переменная типа "объект ClassOne"


Во втором тогда two указатель на указатель на объект?

Во втором — да.


Судя из примеров кода получается что в первом случае объект создаётся в момент инициализации?


Если так, то уничтожится ли объект если я сделаю


Код: plaintext
1.
one = NULL;

?


Это недопустимая конструкция. Будет ошибка компиляции.

Если
two = NULL;

объект все равно не удалится.
Надо явно вызывать delete.


Снова, если он создаётся в первом случае автоматом тогда...
Код: plaintext
1.
2.
3.
class MyClass {
  WebServer server(80);
};


Компилятор матерится на такой [/quot]

Правильно матерится.
Что тв хотел сделать?
...
Рейтинг: 0 / 0
Создание объектов
    #38467563
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovxneoПо идее в первом случае one это указатель на объект?
Это у тебя дурная дельфийская идея. Нет, это не указатель, это сам объект, размещённый в
стэке. И уничтожается он тогда же когда и все остальные локальные переменные - при выходе
из блока где объявлен.


Не факт, что объект на стеке
...
Рейтинг: 0 / 0
Создание объектов
    #38467565
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xneoпросто не скомпилируетсяпропущено...

Зависит от конструктора класса ClassOne, если он не принимает NULL, то просто не скомпилируется.

Не совсем понял причём тут конструктор?
Конструктор и правда ни при чем.

Компилятор будет искать оператор присваивания из void *.
...
Рейтинг: 0 / 0
Создание объектов
    #38467725
дадуда___
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Открывай учебник по C++ и учи. Отрывочные познания в виде ответов с форуме здесь не прокляпают. Размещение объектов на стеке очень удобно для локальных объектов (чтобы не вызывать delete). В этих ваших делфях, которые якобы создавались для разработки прикладных программ даже этого нет. То есть уровень обычного низкоуровневого С.
...
Рейтинг: 0 / 0
Создание объектов
    #38467793
xneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivПравильно матерится.
Что ты хотел сделать?
Я могу описать локальную переменную таким способом:
Код: plaintext
1.
2.
3.
MyClass::SomeMethod() {
  WebServer server(80);
}


Если я правильно понял, то при входе в метод(процедуру) эта переменная инициализируется вызывая конструктор и при выходе из процедуры уничтожается, вызывая деструктор (или нет?).
Если так, то почему компилятор не даёт указать такую же переменную для класса?
Код: plaintext
1.
2.
3.
class MyClass {
  WebServer server(80);
};
...
Рейтинг: 0 / 0
Создание объектов
    #38467796
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xneoпочему компилятор не даёт указать такую же переменную для класса?
Потому что в классе это уже не переменная, а member, инициализация которого должна
проводиться в конструкторе.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создание объектов
    #38467798
xneo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь всё понятно, большое спасибо за ответы :)
...
Рейтинг: 0 / 0
Создание объектов
    #38467875
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xneoMasterZivПравильно матерится.
Что ты хотел сделать?
Я могу описать локальную переменную таким способом:
Код: plaintext
1.
2.
3.
NuClide::SomeMethod() {
  WebServer server(80);
}


Если я правильно понял, то при входе в метод(процедуру) эта переменная инициализируется вызывая конструктор и при выходе из процедуры уничтожается, вызывая деструктор (или нет?).


Да, так.



Если так, то почему компилятор не даёт указать такую же переменную для класса?
Код: plaintext
1.
2.
3.
class MyClass {
  WebServer server(80);
};



Здесь два действия, объявление члена класса и инициализация.
Объявление разрешено, а инициализация — нет, потому что конструкторы членов должны вызываться из конструкторов классов. Конструкторов много, потому и так заведено.
...
Рейтинг: 0 / 0
Создание объектов
    #38468088
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xneo,

Реомендую глянуть книгу
Джефф Элджер
"C++" Библиотека Программиста
(чёрненькая, мягэнькая, формат А5 наверное - половинка А4)

Она как бы с элементарных действий, но очень занимательна.
Даёт понимание проблем, наталкивает на интересные решения, не так суха и не сильно замудренна.
Если дочитаете до конца и проникнетесь - многие вопросы на этом форуме будут понятны, как и красивые способы их решений :)

удачи вам
(круглый)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Создание объектов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]