Skip to content

Commit 33e8938

Browse files
authored
Merge pull request #2 from DoctorLai/uniqueptr
Unique Ptr
2 parents 1361c3c + 3fc83fa commit 33e8938

File tree

4 files changed

+86
-0
lines changed

4 files changed

+86
-0
lines changed

unique_ptr_basics/Makefile

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# shared compiler configuration
2+
include ../common.mk
3+
4+
TARGET := unique_ptr_basics
5+
SRCS := main.cpp
6+
OBJS := $(SRCS:.cpp=.o)
7+
8+
all: $(TARGET)
9+
10+
$(TARGET): $(OBJS)
11+
$(CXX) $(CXXFLAGS) -o $@ $^
12+
13+
%.o: %.cpp
14+
$(CXX) $(CXXFLAGS) -c $< -o $@
15+
16+
run: $(TARGET)
17+
./$(TARGET)
18+
19+
clean:
20+
rm -f $(OBJS) $(TARGET)
21+
22+
.PHONY: all clean run

unique_ptr_basics/main.cpp

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#include <iostream>
2+
#include <memory>
3+
#include <utility>
4+
5+
class Resource {
6+
public:
7+
explicit Resource(int id) : id_(id) {
8+
std::cout << "Resource " << id_ << " acquired\n";
9+
}
10+
11+
~Resource() {
12+
std::cout << "Resource " << id_ << " released\n";
13+
}
14+
15+
void use() const {
16+
std::cout << "Using resource " << id_ << "\n";
17+
}
18+
19+
private:
20+
int id_;
21+
};
22+
23+
// Factory function: returns ownership
24+
std::unique_ptr<Resource> make_resource(int id) {
25+
return std::make_unique<Resource>(id);
26+
}
27+
28+
// Takes ownership explicitly
29+
void consume_resource(std::unique_ptr<Resource> res) {
30+
std::cout << "Consuming resource\n";
31+
res->use();
32+
// res is destroyed here
33+
}
34+
35+
// Borrows resource (no ownership transfer)
36+
void inspect_resource(const Resource& res) {
37+
std::cout << "Inspecting resource\n";
38+
res.use();
39+
}
40+
41+
int main() {
42+
std::cout << "=== create resource ===\n";
43+
auto r1 = make_resource(1);
44+
45+
std::cout << "\n=== borrow resource ===\n";
46+
inspect_resource(*r1);
47+
48+
std::cout << "\n=== move ownership ===\n";
49+
auto r2 = std::move(r1);
50+
51+
if (!r1) {
52+
std::cout << "r1 no longer owns the resource\n";
53+
}
54+
55+
std::cout << "\n=== transfer ownership to function ===\n";
56+
consume_resource(std::move(r2));
57+
58+
if (!r2) {
59+
std::cout << "r2 no longer owns the resource\n";
60+
}
61+
62+
std::cout << "\n=== end of program ===\n";
63+
return 0;
64+
}

unique_ptr_basics/main.o

6.9 KB
Binary file not shown.
16.6 KB
Binary file not shown.

0 commit comments

Comments
 (0)