Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create a new object from existing pointer C++

I've looked for the answer but still can't figure this out.

Sorry, but my work is too complex to copy here sample code.

I have a function, which gets a pointer as parameter; I use it, but later, I need a kind of callback, where I want to use my old pointed object.

The problem is, when this callback is invoked, the pointer has already been deleted or freed. My idea was to make a copy of the pointed object on the heap, and free it when callback is finished. But I got lost between pointers, copy constructors and other stuff. The solution is probably quite simple, but I'm stuck.

like image 498
Steve M. Bay Avatar asked Sep 12 '25 10:09

Steve M. Bay


2 Answers

If you have a T * p, then you can make a new object like so:

T x(*p);

Or, if you must (but seriously, don't!), a dynamically allocated object:

T * q = new T(*p);

Don't use the second form. There's no end to the headache you're inviting with that.

like image 136
Kerrek SB Avatar answered Sep 14 '25 23:09

Kerrek SB


Suppose you have a type T, and a pointer T* ptr; Assuming ptr is currently a valid pointer, then T* ptr2 = new T(*ptr); should invoke the copy constructor on T to create a new pointer on the heap. Now, this requires that your type T has a correctly written copy constructor and destructor and the like.

like image 34
Yakk - Adam Nevraumont Avatar answered Sep 14 '25 23:09

Yakk - Adam Nevraumont