опять не пойму что хотят в задании в книге Б. Эккеля
вот есть программа, предназначеная для автоматизации управления блоками памяти: состоит из заголовочника и реализации.
заголовочник:
#ifndef MEM_H
#define MEM_H
typedef unsigned char byte;
class Mem {
byte* mem;
int size;
bool move;
void ensureMinSize(int minSize);
public:
Mem();
Mem(int sz);
~Mem();
int msize();
byte* pointer();
byte* pointer(int minSize);
bool moved();
};
#endif
реализация класса :
#include <cstring>
#include "Mem.h"
using namespace std;
Mem::Mem() { mem = 0; size = 0; }
Mem::Mem(int sz) {
mem = 0;
size = 0;
ensureMinSize(sz);
}
Mem::~Mem() { delete []mem; }
int Mem::msize() { return size; }
void Mem::ensureMinSize(int minSize) {
if(size < minSize) {
byte* newmem = new byte[minSize];
memset(newmem + size, 0, minSize - size);
memcpy(newmem, mem, size);
delete []mem;
mem = newmem;
size = minSize;
}
}
byte* Mem::pointer() { return mem; }
byte* Mem::pointer(int minSize) {
ensureMinSize(minSize);
return mem;
} ///:~
кратенькое описание копипастил из книги : Объект Mеm содержит байтовый буфер и следит за тем, чтобы объем буфера был достаточным. Конструктор по умолчанию вообще не выделяет память, а второй конструктор выделяет блок объемом sz. Деструктор освобождает память, функция msize() сообщает текущий размер буфера в байтах, а функция pointer() возвращает указатель на начальный адрес буфера (объект Mеm работает на достаточно низком уровне). Также существует перегруженная версия pointer(), при помощи которой прикладной программист указывает, что ему нужен указатель на буфер объемом не менее minSize; перегруженная версия функции pointer() автоматически обеспечивает выполнение этого условия. И конструктор, и функция pointer() увеличивают размер буфера при помощи закрытой функции ensureMinSize() (обратите внимание, что из-за возможного перераспределения памяти сохранять результат pointer() небезопасно).
а вот теперь само задание : Включите в класс Mеm функцию bool moved(), которая получает результат вызова pointer() и сообщает, был ли перемещен указатель (вследствие перераспределения памяти). Напишите функцию main() для тестирования функции moved(). Что разумнее, использовать функции типа moved() или просто вызывать pointer каждый раз, когда потребуется обратиться к памяти в Mеm?
мне это задание совершенно непонятно. ну вот я введу свойство bool move . буду его менять в методе ensureMinSize в случае если сработает условие (size < minSize) . метод moved будет выдавать это свойство. символизировать оно будет, что было только что перераспределение памяти и теперь главный вопрос : а кто будет сбрасывать move в значение false ?