C++
Smart Pointers
unique_ptr, shared_ptr, weak_ptr.
By EZ4Code Team
smart-pointermemory
Code
#include <memory>
#include <iostream>
class Resource {
public:
Resource() { std::cout << "acquired\n"; }
~Resource() { std::cout << "destroyed\n"; }
void use() { std::cout << "using\n"; }
};
int main() {
// unique_ptr: exclusive ownership
auto up = std::make_unique<Resource>();
up->use();
// auto up2 = up; // Error: cannot copy
auto up2 = std::move(up); // Transfer ownership
// shared_ptr: shared ownership
auto sp1 = std::make_shared<Resource>();
auto sp2 = sp1; // Reference count +1
std::cout << "count: " << sp1.use_count() << "\n"; // 2
// weak_ptr: doesn't increase ref count
std::weak_ptr<Resource> wp = sp1;
if (auto locked = wp.lock()) {
locked->use();
}
// Custom deleter
std::shared_ptr<FILE> file(fopen("test.txt", "w"), fclose);
return 0;
}Explanation
unique_ptr owns exclusively; shared_ptr shares via reference counting; weak_ptr avoids circular references.