Иногда известно, что new
выделяет память, которая уже была выделена другим объектам, и когда это происходит, хороший код C ++ должен повторить выделение в надежде на то, что память не будет использоваться совместно с другими ...
НЕТ!
new
все в порядке, ваша программа глючит. Напишите это сто раз на доске.
new
никогда не даст вам память, которая была передана кому-то другому НО , если вы сделали что-то плохое раньше (то есть доступ за пределы, разыменование указателя, как только объект, на который он указывал, имеет был освобожден, использовал недействительный итератор и миллионы других возможных нарушений "UB"), а затем new
получает специальное разрешение и может делать все, что захочет, включая создание демонов из ваших ноздрей.
Ваш код выглядит весьма подозрительно, но я не вижу ничего, что наверняка ошибка (слишком много кода скрыто, например, что такое ObjRef и как он объявлен). Однако из того, что я вижу, я почти уверен, что вы сделали что-то не так, прежде чем перейти к этому новому распределению, потому что есть много нарушений хороших практик C ++ (например, показанный класс имеет конструктор и конструктор копирования, но нет оператора присваивания или деструктора) .
Самая большая проблема с показанным кодом заключается в том, что он выглядит как полуобеспеченная и ошибочная попытка имитировать подмножество того, что будет делать обычный std :: vector. Чтобы точно сказать, что является (являются) проблемой (ами), требуется больше контекста ... это плохой код, но может быть законным в зависимости от того, как был написан другой код. Также очевидно, что даже этот небольшой фрагмент кода был изменен и уменьшен, поскольку нет методов для доступа к чему-либо, нет друзей и членов данных, которые являются частными (поэтому в принципе невозможно что-либо сделать с этими объектами).