+ 1
Is it possible to assign an weak_ptr to an existing object?
I don't really understand the smart pointers. how can I let the weak_ptr point to it like this: ObjectName o; weak_ptr<ObjectName> p = o; and it didn't work ... maybe I have to do something with a shared pointer?
2 Answers
+ 2
The smart pointers are there to take ownership of an object and call delete on it when it goes out of scope.
Your object o is allocated on the stack, that means that delete cannot be called on it so smart pointers cannot own it.
T* t = new T;
assuming that T is defined as:
class T
{
public:
~T(){std::cout << "destroyed\n";};
};
std::unique_ptr<T> pU(std::move(t)); for example takes ownership of t and will destroy it when it goes out of scope so I don't have to call delete t;
weak_ptr is not a stand alone pointer, it's an augmentation of shared_ptr
a shared_ptr keeps track of a reference count and deletes it once the reference count reaches 0.
a weak_ptr does not participate in the shared ownership of the pointed-to resource.
There is alot more to it and I recommend that you read Effective Modern C++ by Scott Meyers which covers all of this.
I also recommend that you watch these to get a gist of it
Unique pointers
https://www.youtube.com/watch?v=YeI6V2O5BFE
Shared pointers
https://www.youtube.com/watch?v=qUDAkDvoLas
Weak pointers:
https://www.youtube.com/watch?v=EWoMjuN5OH4
So this would compile:
std::shared_ptr<T> spA(new T);
std::weak_ptr<T> wpA(spA);
+ 1
@Dennis thank you very much :)