Skip to content

Commit 3a9beaf

Browse files
committed
shared_ptr split from memory, improve
1 parent 6d80ba9 commit 3a9beaf

4 files changed

Lines changed: 56 additions & 29 deletions

File tree

‎cpp/memory.cpp‎

Lines changed: 0 additions & 25 deletions
This file was deleted.

‎cpp/no_base_no_member.hpp‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ class NoBaseNoMember {
3030
}
3131

3232
/// Destructor
33-
~NoBaseNoMember(){callStack.push_back("NoBaseNoMember::~NoBaseNoMember()");}
33+
~NoBaseNoMember() { callStack.push_back("NoBaseNoMember::~NoBaseNoMember()"); }
3434

35-
void method(){callStack.push_back("NoBaseNoMember::method()");}
35+
void method() { callStack.push_back("NoBaseNoMember::method()"); }
3636

3737
static NoBaseNoMember create() {
3838
return NoBaseNoMember();

‎cpp/shared_ptr.cpp‎

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
# shared_ptr
3+
4+
Introuced in C++11, before that as part of boost.
5+
6+
Reference counts usages, deletes data when the last one is gone.
7+
*/
8+
9+
#include "common.hpp"
10+
#include "no_base_no_member.hpp"
11+
12+
int main() {
13+
#if __cplusplus >= 201103L
14+
{
15+
callStack.clear();
16+
17+
// First reference
18+
std::shared_ptr<NoBaseNoMember> sp1(new NoBaseNoMember(1));
19+
assert(sp1.use_count() == 1);
20+
assert(sp1->i == 1);
21+
22+
// Create reference with copy constructor.
23+
std::shared_ptr<NoBaseNoMember> sp2(sp1);
24+
assert(sp1.use_count() == 2);
25+
assert(sp2->i == 1);
26+
27+
// Create reference with assignment constructor.
28+
std::shared_ptr<NoBaseNoMember> sp3;
29+
sp3 = sp1;
30+
assert(sp1.use_count() == 3);
31+
assert(sp3->i == 1);
32+
33+
// ERROR No converstion operator to pointer defined.
34+
//NoBaseNoMember *spp = sp1;
35+
36+
// Replace one reference with a new pointer.
37+
sp1 = std::shared_ptr<NoBaseNoMember>(new NoBaseNoMember(2));
38+
// ERROR No constructor directly from pointers.
39+
//sp1 = new NoBaseNoMember(2);
40+
assert(sp1.use_count() == 1);
41+
assert(sp2.use_count() == 2);
42+
assert(sp1->i == 2);
43+
assert(sp2->i == 1);
44+
45+
// Replace the remaining references and check that the destructor got called.
46+
sp2 = sp1;
47+
assert(callStack.back() != "NoBaseNoMember::~NoBaseNoMember()");
48+
sp3 = sp1;
49+
assert(callStack.back() == "NoBaseNoMember::~NoBaseNoMember()");
50+
}
51+
#endif
52+
}

‎cpp/tuple.cpp‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ int main() {
3636

3737
// Tuple from pair.
3838
{
39-
std::tuple<int,char> t2( std::pair<int,char>(0, 'a'));
39+
std::tuple<int,char> t2(std::pair<int,char>(0, 'a'));
4040
}
4141

4242
// Uniform initialization.
@@ -112,7 +112,7 @@ int main() {
112112
#if __cplusplus >= 201703L
113113
auto tuple = std::make_tuple(1, 'a', 2.3);
114114
auto [ i, c, d ] = tuple;
115-
jassert(i == 1);
115+
assert(i == 1);
116116
assert(c == 'a');
117117
assert(d == 2.3);
118118
}

0 commit comments

Comments
 (0)