If you attempt to manually delete a shared pointer twice, like this:
#include <memory>
int main() {
auto Pointer{std::make_shared<int>(42)};
delete Pointer.get();
delete Pointer.get();
}
You will encounter undefined behavior. The shared pointer is designed to automatically manage the lifetime of the object it points to. When the last shared pointer owning the object is destroyed, the object is automatically deleted.
By manually deleting the pointer, you interfere with this mechanism. The first manual delete will free the memory, and the second attempt to delete it will be operating on memory that has already been freed.
This can lead to crashes, memory corruption, or other undesirable results.
The correct approach is to simply allow the shared pointers to manage the object lifetime for you:
#include <iostream>
#include <memory>
int main() {
auto Pointer{std::make_shared<int>(42)};
std::cout << *Pointer;
}
42
When Pointer goes out of scope at the marked line, the int is automatically deleted, with no manual intervention required.
Answers to questions are automatically generated and may not have been reviewed.
std::shared_ptr
An introduction to shared memory ownership using std::shared_ptr