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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
4e87
4 / 4 / 1
Регистрация: 20.08.2011
Сообщений: 51
#1

Немного о динамическом выделении памяти ... - C++

22.08.2011, 01:38. Просмотров 470. Ответов 2
Метки нет (Все метки)

объявление данных в классе:

C++
1
2
3
4
5
6
class Employee
{..........
      private:
char *firstName;
char *lasrName;
}
конструктор динамически выделяет память для имени и фамилии:
C++
1
2
3
4
5
6
7
8
Employee::Employee(const char *first, const char * last)
{
        firstName= new char[strlen(first)+1];
        assert( firstName != 0);
        strspy( firstName, first);
 
........аналогично для last.....
}
Далее в мэйне:
C++
1
Employee *e1Ptr = new Employee ("Вася", "Пупкин");
Вопрос:необходимо небольшое разъяснение по поводу порядка выделения памяти при объявлении указателя на Employee и в когструкторе.
заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2011, 01:38     Немного о динамическом выделении памяти ...
Посмотрите здесь:

Вопрос о динамическом выделении памяти - C++
Доброго времени суток всем. у меня вопрос к работе следующего кода: delete values; // Удаляем массив из кучи ...

Ошибка на динамическом выделении памяти - C++
программа ниже безупречно выполнялась под С++Builder 6.0 (консольное приложение). При переводе ее в VC6.0 (кроме сделанных исправлений -...

Ошибка при динамическом выделении памяти - C++
Я не понимаю почему, но почему-то пример по динамическому выделению памяти, взятый с этой веб-страницы: http://cppstudio.com/post/9555/...

Ошибка при динамическом выделении памяти - C++
почему у меня возникет ошибка вот тут struct TOVAR *New = new struct TOVAR; пишит недопустимый неполный тип на struct подчеркивает...

Вопрос о динамическом выделении памяти для строки - C++
Как можно реализовать динамическое выделение для строки, т.е. например у меян есть указатель - char *c. Мне необходимо ввести строку с...

Создание исключения при динамическом выделении памяти - C++
Вот код из учебника в нем мне все понятно. #include<iostream> #include<cstdlib> //exit() #include<new> using std::cout;using...

Выравнивание при динамическом выделении памяти под массив - C++
Добрый вечер. Для того, чтобы выделить память под массив динамически и выровнять указатель по 16 байтам, в разных ОС существуют разные...

Cin.getline() не работает при динамическом выделении памяти - C++
Почему в таком коде cin.getline() работает не так как надо? Если очистить поток, то будет все нормально. #include <iostream> using...

Использование конструктора базового класса при динамическом выделении памяти - C++
Есть базовый класс, от него наследуются несколько классов, свой конструктор я определил в базовом классе. Далее нужно сделать так:parent...

Ошибка при динамическом выделении двумерного массива char - C++
Ребята, спасите-помогите. Нужно выделить двумерный массив типа char для игрового поля. Выделяю вроде бы как положено, но получаю рантайм...

Ошибка в выделении памяти - C++
проблема с выделением памяти. ошибку никак найти не могу, поможет кто исправить? #include <iostream> #include <stdlib.h> using...

Ошибка при выделении памяти - C++
Здравствуйте, друзья. Подскажите, пожалуйста, почему выскакивает ошибка при повторном выделении память (ведь память в куче удаляется...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Overmind024
99 / 99 / 6
Регистрация: 10.09.2010
Сообщений: 267
22.08.2011, 04:33     Немного о динамическом выделении памяти ... #2
С начало выделятся память под новый Employee потом под firstName и соответственно под lastName.
Сыроежка
Заблокирован
22.08.2011, 16:58     Немного о динамическом выделении памяти ... #3
Цитата Сообщение от 4e87 Посмотреть сообщение
объявление данных в классе:

C++
1
2
3
4
5
6
class Employee
{..........
      private:
char *firstName;
char *lasrName;
}
конструктор динамически выделяет память для имени и фамилии:
C++
1
2
3
4
5
6
7
8
Employee::Employee(const char *first, const char * last)
{
        firstName= new char[strlen(first)+1];
        assert( firstName != 0);
        strspy( firstName, first);
 
........аналогично для last.....
}
Далее в мэйне:
C++
1
Employee *e1Ptr = new Employee ("Вася", "Пупкин");
Вопрос:необходимо небольшое разъяснение по поводу порядка выделения памяти при объявлении указателя на Employee и в когструкторе.
заранее спасибо.
Порядок следующий. Сначала в стеке создается переменная e1Ptr, затем вступает в действие инициализатор этой переменной, который является значением выражения с оператором new. Этот оператор сначала выделяет память, равную размеру класса. Затем запускает конструктор этого класса. Конструктор последовательно выделяет память под свои члены класса firstName и lasrName

Далее в функции main по завершению работы с этим объектом, вы должны удалить память выделенную 1) для членов объекта firstName и lasrName и для самого объекта. Поэтому вы должны написать деструктор вашего класса, который будет вызван, когда вы напишите опеоатор

C++
1
delete e1Ptr;
Ответ Создать тему
Опции темы

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