Commit 5afa692eb38d5a491609824b01ae881085d76dec
1 parent
70abbf1e
Replace malloc with aligned_alloc
Showing
2 changed files
with
5 additions
and
5 deletions
examples11/04-vectortmpl/makefile
@@ -4,7 +4,7 @@ testvector: testvector.o | @@ -4,7 +4,7 @@ testvector: testvector.o | ||
4 | g++ -g -Wall $^ -o $@ | 4 | g++ -g -Wall $^ -o $@ |
5 | 5 | ||
6 | testvector.o: testvector.cpp vector.h | 6 | testvector.o: testvector.cpp vector.h |
7 | - g++ -g -c -Wall -pedantic $< -o $@ | 7 | + g++ -std=c++17 -g -c -Wall -pedantic $< -o $@ |
8 | 8 | ||
9 | opnew: opnew.o | 9 | opnew: opnew.o |
10 | g++ -g -Wall $^ -o $@ | 10 | g++ -g -Wall $^ -o $@ |
examples11/04-vectortmpl/vector.h
@@ -22,7 +22,7 @@ public: | @@ -22,7 +22,7 @@ public: | ||
22 | 22 | ||
23 | cap = round_up_to_power_of_2(s); | 23 | cap = round_up_to_power_of_2(s); |
24 | 24 | ||
25 | - data = static_cast<C *>(malloc(cap * sizeof(C))); | 25 | + data = static_cast<C *>(std::aligned_alloc(alignof(C), cap * sizeof(C))); |
26 | if (!data) | 26 | if (!data) |
27 | throw bad_alloc(); | 27 | throw bad_alloc(); |
28 | size = s; | 28 | size = s; |
@@ -57,7 +57,7 @@ public: | @@ -57,7 +57,7 @@ public: | ||
57 | 57 | ||
58 | vector(const vector<C> &s) { | 58 | vector(const vector<C> &s) { |
59 | cap = s.cap; | 59 | cap = s.cap; |
60 | - data = static_cast<C *>(malloc(cap * sizeof(C))); | 60 | + data = static_cast<C *>(std::aligned_alloc(alignof(C), cap * sizeof(C))); |
61 | if (!data) | 61 | if (!data) |
62 | throw bad_alloc(); | 62 | throw bad_alloc(); |
63 | size = s.size; | 63 | size = s.size; |
@@ -110,13 +110,13 @@ public: | @@ -110,13 +110,13 @@ public: | ||
110 | if (cap > std::numeric_limits<decltype(size)>::max() / 2) | 110 | if (cap > std::numeric_limits<decltype(size)>::max() / 2) |
111 | throw bad_alloc(); | 111 | throw bad_alloc(); |
112 | unsigned int newcap = (cap == 0) ? 1 : 2 * cap; | 112 | unsigned int newcap = (cap == 0) ? 1 : 2 * cap; |
113 | - C *newdata = static_cast<C *>(malloc(newcap * sizeof(C))); | 113 | + C *newdata = static_cast<C *>(std::aligned_alloc(alignof(C), newcap * sizeof(C))); |
114 | if (!newdata) | 114 | if (!newdata) |
115 | throw bad_alloc(); | 115 | throw bad_alloc(); |
116 | unsigned i; | 116 | unsigned i; |
117 | try { | 117 | try { |
118 | for (i = 0; i < size; i++) | 118 | for (i = 0; i < size; i++) |
119 | - new (newdata + i) C(data[i]); | 119 | + new (newdata + i) C(std::move(data[i])); |
120 | } catch (...) { | 120 | } catch (...) { |
121 | for (unsigned j = 0; j < i; ++j) | 121 | for (unsigned j = 0; j < i; ++j) |
122 | (newdata + j)->~C(); | 122 | (newdata + j)->~C(); |