From 1d5c979607f88870e6501225aa8656b24f7c0b33 Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 31 Jul 2020 00:00:26 +0300 Subject: [PATCH] fix bug in move constructor --- CMakeLists.txt | 2 +- lib/main/containers/pideque.h | 7 ++----- lib/main/containers/pimap.h | 3 +-- lib/main/containers/pivector.h | 5 ++--- lib/main/core/pistring.h | 2 +- main.cpp | 31 +++++++++++++++++++++++-------- 6 files changed, 30 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2fcbe46b..f530f135 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,7 +40,7 @@ set(PIP_UTILS 1) if(LIBPROJECT) set(PIP_UTILS ${UTILS}) endif() -set(CMAKE_CXX_STANDARD_REQUIRED 1) +set(CMAKE_CXX_STANDARD_REQUIRED TRUE) set(CMAKE_CXX_STANDARD 11) diff --git a/lib/main/containers/pideque.h b/lib/main/containers/pideque.h index 259b997e..6efead6f 100644 --- a/lib/main/containers/pideque.h +++ b/lib/main/containers/pideque.h @@ -32,7 +32,6 @@ template class PIDeque { public: inline PIDeque(): pid_data(0), pid_size(0), pid_rsize(0), pid_start(0) { - //piCout << "PIDeque"; PIINTROSPECTION_CONTAINER_NEW(T, sizeof(T)) } inline PIDeque(const PIDeque & other): pid_data(0), pid_size(0), pid_rsize(0), pid_start(0) { @@ -49,11 +48,10 @@ public: PIINTROSPECTION_CONTAINER_NEW(T, sizeof(T)) resize(pid_size, f); } - inline PIDeque(PIDeque && other): pid_data(other.pid_data), pid_size(other.pid_size), pid_rsize(other.pid_size), pid_start(other.pid_start) { + inline PIDeque(PIDeque && other): pid_data(other.pid_data), pid_size(other.pid_size), pid_rsize(other.pid_rsize), pid_start(other.pid_start) { other._reset(); } inline virtual ~PIDeque() { - //piCout << "~PIDeque"; PIINTROSPECTION_CONTAINER_DELETE(T) PIINTROSPECTION_CONTAINER_FREE(T, (pid_rsize)) deleteT(pid_data + pid_start, pid_size); @@ -70,8 +68,7 @@ public: } inline PIDeque & operator =(PIDeque && other) { - PIDeque moved(std::move(other)); - swap(moved); + swap(other); return *this; } diff --git a/lib/main/containers/pimap.h b/lib/main/containers/pimap.h index 6cf4b5c4..7a5486fe 100644 --- a/lib/main/containers/pimap.h +++ b/lib/main/containers/pimap.h @@ -86,8 +86,7 @@ public: } PIMap & operator =(PIMap && other) { - PIMap moved(std::move(other)); - swap(moved); + swap(other); return *this; } diff --git a/lib/main/containers/pivector.h b/lib/main/containers/pivector.h index 017e0f73..e41aeaea 100644 --- a/lib/main/containers/pivector.h +++ b/lib/main/containers/pivector.h @@ -48,7 +48,7 @@ public: PIINTROSPECTION_CONTAINER_NEW(T, sizeof(T)) resize(piv_size, f); } - inline PIVector(PIVector && other): piv_data(other.piv_data), piv_size(other.piv_size), piv_rsize(other.piv_size) { + inline PIVector(PIVector && other): piv_data(other.piv_data), piv_size(other.piv_size), piv_rsize(other.piv_rsize) { other._reset(); } inline virtual ~PIVector() { @@ -69,8 +69,7 @@ public: } inline PIVector & operator =(PIVector && other) { - PIVector moved(std::move(other)); - swap(moved); + swap(other); return *this; } diff --git a/lib/main/core/pistring.h b/lib/main/core/pistring.h index bbc8543a..0fb7bedd 100644 --- a/lib/main/core/pistring.h +++ b/lib/main/core/pistring.h @@ -91,7 +91,7 @@ public: PIString & operator =(const PIString & o) {if (this == &o) return *this; clear(); *this += o; return *this;} - PIString & operator =(PIString && o) {PIString moved(std::move(o)); swap(moved); return *this;} + PIString & operator =(PIString && o) {swap(o); return *this;} /*! \brief Return c-string representation of string * \details Converts content of string to c-string and return diff --git a/main.cpp b/main.cpp index dbabd1f9..923d74ee 100644 --- a/main.cpp +++ b/main.cpp @@ -31,23 +31,38 @@ int main() { } #endif */ +class db { +public: + db() { + for (int i=0; i<1000; ++i) + x << sin(double(i)/180.0); + printf("jkfkhg\n"); + } +// db(const db & d) {x = d.x;} +// db(db && o) {x.swap(o.x);} +private: + PIVector x; +}; #include "picodeparser.h" int main() { piDebug = false; - PIString t("1234567890-="); + printf("==============\n"); double min = -1, max = -1, mean = 0; for (int i = 0; i < 50; ++i) { PITimeMeasurer tm; /*PICodeParser cp; cp.parseFile("SH_plugin_base.h");*/ - PIStringList sl; - sl.reserve(500000); - for (int i = 0; i < 500000; ++i) { -// PIString s(t); -// sl << s; - sl.push_back(PIString(t)); - //sl << PIString("1234567890-="); + PIVector sl; + sl.reserve(10000); + db d; + for (int i = 0; i < 10000; ++i) { +// db b(d); +// db c(b); +// c = b; +// sl << c; + sl << db(d); +// sl << std::move(d); } double ms = tm.elapsed_m(); if (min < 0) min = ms;