лучший способ хранить адреса указателя на объект класса - PullRequest
0 голосов
/ 26 октября 2011

У меня есть класс A, чьи объекты создаются динамически:

A *object;
object = new A;

будет много объектов A в исполнении.я создал метод в A, чтобы вернуть адрес конкретного объекта в зависимости от переданного идентификатора.

A *A::get_obj(int id)

реализация get_obj требует изменения, поэтому я выбрал векторы для хранения адресовобъекты.

vector<A *> myvector

Я думаю, что другой способ сделать это - создать файл и сохранить адрес в виде текста в определенной строке (это будет идентификатор).это поможет мне уменьшить использование памяти, поскольку я не буду создавать вектор тогда.что я не знаю, что этот метод будет занимать больше времени, чем векторный метод?Любой другой способ сделать то же самое можно только приветствовать.

Ответы [ 3 ]

5 голосов
/ 26 октября 2011

Не храните указатели в файлах. Когда-либо. В любом случае объекты А занимают больше места, чем указатели на них. Если вам нужно больше символов «А», чем вы можете удержать за один раз, то вам необходимо создать их по мере необходимости и сериализовать данные экземпляра на диск, если вам потребуется вернуть их позже перед удалением, но не адрес.

3 голосов
/ 26 октября 2011

будет ли этот метод занимать больше времени, чем векторный метод?

Да, это займет намного больше времени - каждый поиск займет несколько тысяч раз дольше. Это не повредит, если поиски редки, но если они частые, это может быть плохо.

это поможет мне уменьшить использование памяти

Сколько объектов вы ожидаете управлять таким образом? Вы уверены, что использование памяти будет проблемой?

приветствуется любая другая возможность сделать то же самое

Это ваши два варианта, правда. Вы можете управлять списком в памяти или на диске. В зависимости от сценария использования вы можете комбинировать оба метода. Например, вы можете хранить часто используемые объекты в памяти и записывать редко используемые объекты на диск (в основном это кэширование).

2 голосов
/ 26 октября 2011

Хранение ваших данных в файле будет значительно медленнее, чем в оперативной памяти.

Что касается самой структуры данных, если вы обычно используете все идентификаторы, то есть если ваш вектор обычно имеет пустые ячейки, то std::vector, вероятно, является наиболее подходящим подходом. Но если в вашем векторе будет много пустых ячеек, std::map может дать вам лучшее решение. Он потребляет меньше памяти и усложняет доступ O (logN).

Самое важное здесь, imho, это размер вашего набора данных и вашей платформы. Для современного ПК обработка карты в памяти тысяч записей выполняется очень быстро, но если вы обрабатываете гигабайты данных, вам лучше хранить их в реальной базе данных на диске (например, MySQL).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...