Создать новый объект из существующего указателя Переполнение стека

Я искал ответ, но все еще не могу понять это.

Извините, но моя работа слишком сложна, чтобы скопировать здесь пример кода.

У меня есть функция, которая получает указатель в качестве параметра; Я использую его, но позже мне нужен своего рода обратный вызов, где я хочу использовать свой старый заостренный объект.

Проблема в том, что когда вызывается этот обратный вызов, указатель уже удален или освобожден. Моя идея состояла в том, чтобы сделать копию указанного объекта в куче и освободить ее, когда обратный вызов будет завершен. Но я заблудился между указателями, конструкторами копирования и другими вещами. Решение, вероятно, довольно простое, но я застрял.

2

Решение

Предположим, у вас есть тип Tи указатель T* ptr; Если предположить, ptr в настоящее время действительный указатель, то T* ptr2 = new T(*ptr); должен вызвать конструктор копирования на T, чтобы создать новый указатель на кучу. Теперь это требует, чтобы ваш тип T имеет правильно написанный конструктор копирования и деструктор и тому подобное.

1

Другие решения

Если у тебя есть T * p, тогда вы можете сделать новый объект, например, так:

T x(*p);

Или, если вам нужно (но серьезно, не надо!), Динамически размещаемый объект:

T * q = new T(*p);

Не используйте вторую форму. Там нет конца головной боли, которую вы приглашаете с этим.

4

Я только что нашел это:
C ++ Idioms / Virtual Constructor

0

Еще один способ сделать это:

MyObject* pointerFromOld;
...
MyObject newObject = *pointerFromOld;

Звездочка перед указателем возвращает объект, на который она указывает (интерпретирует содержимое адреса как объект), а назначение этого объекта newObject делает его копию.

0
По вопросам рекламы [email protected]