Как удалить указатель на массив объектов, не удаляя сами объекты? C ++ - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть указатель на набор пар - pair (K, V) * myPairs - и рассматриваемый экземпляр - with (string, Set (string)), где Set - это двоичный класс дерева поиска. Я пытаюсь создать функцию, которая удваивает размер myPairs, поэтому я:

  • создаю новые пары и копирую данные из myPairs
  • удаляю myPairs
  • установите myPairs в newPairs

Проблема заключается в том, что удаление myPairs также вызывает деструктор для связанных наборов, но я все еще хочу получить доступ к этим данным. Как я могу избежать этого ???

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Как удалить указатель на массив объектов, не удаляя сами объекты? C ++

Нет. Элементы массива являются частью массива. Обойти это невозможно.

Как мне избежать этого?

Использовать другую структуру данных. Если вам нужно изменить размер структуры данных, и вам нужно, чтобы элементы оставались действительными при изменении размера, тогда массив не является опцией. Структуры данных на основе узлов могут сделать это. Вы хотите набор, и стандартная библиотека поставляется с std::set, который соответствует вашим требованиям.

0 голосов
/ 02 апреля 2020

Вы не можете получить доступ к элементам массива, если сам массив потерян!

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

Как это исправить ?: Go dynamici c. Используйте кучу для вашей помощи. Создайте свой массив динамически.

Причина в том, что объекты, созданные в памяти кучи, не уничтожаются вместе с указателем, если вы не указали команду явно .

Вы можете удалить указатель теперь, и ваш массив все еще остается в хранилище.

...