Skip to content

Commit b8e7306

Browse files
committed
Add unique ptr test case
1 parent c9f44f5 commit b8e7306

File tree

4 files changed

+61
-0
lines changed

4 files changed

+61
-0
lines changed

cplusplus/stl/12_concept.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ void test_derived_from() {
3232
std::cout << std::boolalpha;
3333
out(std::derived_from<decltype(d), decltype(b)> == true);
3434

35+
3536
print_base_and_derived_class(b,d);
3637
print_base_and_derived_class(d,b);
3738
}

cplusplus/stl/13_unique_ptr.cpp

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#include "stl.h"
2+
#include "test.hpp"
3+
4+
//====================================================
5+
class Base {
6+
public:
7+
Base() { OUT_FUNC_INFO(); }
8+
Base(const Base &b) { OUT_FUNC_INFO(); }
9+
Base(const Base &&b) { OUT_FUNC_INFO(); }
10+
Base operator=(const Base *b) {
11+
OUT_FUNC_INFO();
12+
return *b;
13+
}
14+
virtual ~Base() { OUT_FUNC_INFO(); }
15+
16+
public:
17+
virtual void out_msg() { out("call ", 1); }
18+
};
19+
20+
class Derived : public Base {
21+
public:
22+
Derived() { OUT_FUNC_INFO(); }
23+
virtual ~Derived() { OUT_FUNC_INFO(); }
24+
25+
public:
26+
virtual void out_msg() override { out("call ", 2); }
27+
};
28+
29+
//====================================================
30+
void test_unique_ptr_1() {
31+
std::unique_ptr<Base> p_b1(new Base());
32+
std::unique_ptr<Base> p_b2 = std::make_unique<Base>();
33+
std::unique_ptr<Base> p_b3 = std::move(p_b2);
34+
std::unique_ptr<Base> p_b4 = std::make_unique<Base>(*p_b3);
35+
}
36+
37+
void test_unique_ptr_2() {
38+
std::unique_ptr<Base> p_b1 = std::make_unique<Derived>();
39+
p_b1->out_msg(); // Derived::otu_msg
40+
p_b1.get()->out_msg(); // Derived::out_msg
41+
static_cast<Base *>(p_b1.get())->out_msg(); // Derived::out_msg
42+
43+
p_b1->Base::out_msg(); // Base::out_msg
44+
}
45+
46+
//====================================================
47+
void test() {
48+
TEST(test_unique_ptr_1);
49+
TEST(test_unique_ptr_2);
50+
}
51+
52+
//====================================================
53+
int main() { test(); }

cplusplus/stl/utils/stl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <algorithm>
1212
#include <concepts>
1313
#include <initializer_list>
14+
#include <memory>
1415
#include <string>
1516
#include <type_traits>
1617
#include <typeinfo>

cplusplus/stl/utils/test.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,9 @@
1313
template <typename... Args> void out(Args... args) {
1414
(std::cout << ... << args) << "\n";
1515
}
16+
17+
#define OUT_FUNC_INFO(...) \
18+
do { \
19+
out("Current Func: ", __PRETTY_FUNCTION__, " ", \
20+
CONNECT_STRING(__VA_ARGS__)); \
21+
} while (0);

0 commit comments

Comments
 (0)