Когда у вас есть объект, он будет находиться в каком-то месте в памяти. Это значение для n1
и n2
. Когда вы удаляете объект, освобождая память, которую использовал этот объект, память становится недействительной. Таким образом, вы никогда не сможете получить доступ к чему-либо, на что указывает n1
, если оно было удалено.
Я предлагаю создать объект-обертку, который содержит счетчик и указатель на объект. Когда вы хотите указать на реальный объект, вместо этого вы должны указать на обертку, а когда вы хотите удалить объект, вы фактически вызываете метод обертки:
Если вы хотите указать на объект, вы должны увеличить счетчик обертки и указать на обертку. Если вы хотите удалить объект, вы должны уменьшить счетчик и установить указатель на оболочку равным нулю. Если счетчик обертки достигает нуля, вы можете безопасно удалить реальный объект, а затем обертку.