5.Свободная память.pptx
- Количество слайдов: 11
5. Классы, использующие свободную память
5. 1. Копирование объектов class S { private: int n; Type arr[N]; public: S(): n(0) {} S(int, …); . . . }; 2
5. 1. Копирование объектов (продолжение) S ob 1(5); . . . { S ob 2 = ob 1; S ob 3(3); ob 3 = ob 1; }. . . ob 1 n 5 arr xxxxx ob 2 5 n arr xxxxx ob 3 5 3 n yyy arr xxxxx 3
5. 2. Динамические объекты class S { private: int n; Type *ptr; public: S(): n(0), ptr(NULL) { } S(int, …); ~S(){delete [ ] ptr; } }; 4
5. 2. Динамические объекты (продолжение) S: : S(int k, …): n(k), ptr(new Type[k]) { // необходимая инициализация // выделенной области памяти. . . } 5
5. 3. Проблемы S ob 1(5, …); . . . { S ob 2 = ob 1; S ob 3(2, …); ob 3 = ob 1; } ob 1 ? ? ? ob 1 n 5 ptr xxxxx ob 2 ? ? ? 5 n ptr ob 3 n 2 5 ptr tt ? ? ? 6
5. 4. Копирующий конструктор – выделение памяти – копирование данных S: : S(const S &ob): n(ob. n), ptr(NULL) { if(n){ ptr = new Type[n]; // копирование данных } } 7
5. 5. Оператор присваивания – освобождение памяти – выделение новой памяти – копирование данных – проверка ситуации a = a 8
5. 5. Оператор присваивания (продолжение) S & S: : operator = (const S& ob) { if(this != &ob) { // проверка a = a delete [ ] ptr; ptr = NULL; if((n = ob. n) != 0) { ptr = new Type[n]; // копирование данных } } return *this; } 9
5. 6. Использование S a 1(3, …), a 2; a 2 = a 3; // присваивание S a 3(a 1); // копирующий конструктор S a 4 = a 1; // копирующий конструктор 10
5. 6. Использование (продолжение) S func (S p) { // S func(const S &p) S a(p); . . . return a; }. . . a 2 = func(a 3); // передача аргумента // возврат результата 11
5.Свободная память.pptx