Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions unique_ptr_basics/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# shared compiler configuration
include ../common.mk

TARGET := unique_ptr_basics
SRCS := main.cpp
OBJS := $(SRCS:.cpp=.o)

all: $(TARGET)

$(TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) -o $@ $^

%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@

run: $(TARGET)
./$(TARGET)

clean:
rm -f $(OBJS) $(TARGET)

.PHONY: all clean run
64 changes: 64 additions & 0 deletions unique_ptr_basics/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#include <iostream>
#include <memory>
#include <utility>

class Resource {
public:
explicit Resource(int id) : id_(id) {
std::cout << "Resource " << id_ << " acquired\n";
}

~Resource() {
std::cout << "Resource " << id_ << " released\n";
}

void use() const {
std::cout << "Using resource " << id_ << "\n";
}

private:
int id_;
};

// Factory function: returns ownership
std::unique_ptr<Resource> make_resource(int id) {
return std::make_unique<Resource>(id);
}

// Takes ownership explicitly
void consume_resource(std::unique_ptr<Resource> res) {
std::cout << "Consuming resource\n";
res->use();
// res is destroyed here
}

// Borrows resource (no ownership transfer)
void inspect_resource(const Resource& res) {
std::cout << "Inspecting resource\n";
res.use();
}

int main() {
std::cout << "=== create resource ===\n";
auto r1 = make_resource(1);

std::cout << "\n=== borrow resource ===\n";
inspect_resource(*r1);

std::cout << "\n=== move ownership ===\n";
auto r2 = std::move(r1);

if (!r1) {
std::cout << "r1 no longer owns the resource\n";
}

std::cout << "\n=== transfer ownership to function ===\n";
consume_resource(std::move(r2));

if (!r2) {
std::cout << "r2 no longer owns the resource\n";
}

std::cout << "\n=== end of program ===\n";
return 0;
}
Binary file added unique_ptr_basics/main.o
Binary file not shown.
Binary file added unique_ptr_basics/unique_ptr_basics
Binary file not shown.