what's the point of std::unique_ptr::get
Solution 1
std::unique_ptr
provides unique ownership semantics safely. However that doesn't rule out the need for non-owning pointers. std::shared_ptr
has a non-owning counterpart, std::weak_ptr
. Raw pointers operate as std::unique_ptr
's non-owning counterpart.
Solution 2
You use it every time you need to pass raw pointer to, say, a C function:
std::unique_ptr<char[]> buffer( new char[1024] );
// ... fill the buffer
int rc = ::write( fd, buffer.get(), len );
Solution 3
The rule I tend to follow is this: if the callee isn't mucking with lifetime/ownership, do not pass it a smart pointer; rather, pass in a raw C++ reference (preferred) or raw pointer. I find it far cleaner and more flexible to separate the concern of ownership from usage.
Solution 4
When your hands are tied and you do need to pass a pointer to something, p.get()
reads better than &*p
.
There is a function that changes the state so the unique_ptr
doesn't hold a pointer anymore, and that one is named release
. This is mostly useful to transfer ownership to other smart pointers that don't provide direct construction from a unique_ptr
. Any other use risks leaking the resource.
lezebulon
Updated on July 05, 2022Comments
-
lezebulon almost 2 years
Doesn't
std::unique_ptr::get
defeat the purpose of having a unique_ptr in the first place? I would have expected this function to change its state so it holds no more pointer. Is there an actual useful use of std::unique_ptr::get?