From d8bd29d96cd315797540bada51de3100532c7d01 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Radovan=20=C4=8Cerven=C3=BD?= <radovan.cerveny@gmail.com>
Date: Fri, 29 Jan 2016 11:15:08 +0100
Subject: [PATCH] moved from raw pointers to smart ones, custom make_unique

---
 alib2algo/src/measurements/MeasurementTypes.hpp |  7 +++++++
 alib2algo/src/measurements/Measurements.cpp     | 16 +++++-----------
 alib2algo/src/measurements/Measurements.hpp     |  3 +--
 3 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/alib2algo/src/measurements/MeasurementTypes.hpp b/alib2algo/src/measurements/MeasurementTypes.hpp
index a1332e8665..4b2890eb2b 100644
--- a/alib2algo/src/measurements/MeasurementTypes.hpp
+++ b/alib2algo/src/measurements/MeasurementTypes.hpp
@@ -5,12 +5,19 @@
 #ifndef MEASUREMENT_TYPES_HPP_
 #define MEASUREMENT_TYPES_HPP_
 
+#include <memory>
+
 namespace measurements {
 
 enum Type {
 	OVERALL = 1, INIT = 2, FINALIZE = 4, MAIN = 8, AUXILIARY = 16
 };
 
+template < typename T, typename ... Args >
+std::unique_ptr < T > make_unique ( Args && ... args ) {
+	return std::unique_ptr < T > ( new T ( std::forward < Args > ( args ) ... ) );
+}
+
 }
 
 #endif /* MEASUREMENT_TYPES_HPP_ */
diff --git a/alib2algo/src/measurements/Measurements.cpp b/alib2algo/src/measurements/Measurements.cpp
index c81a45ab6f..43f776a541 100644
--- a/alib2algo/src/measurements/Measurements.cpp
+++ b/alib2algo/src/measurements/Measurements.cpp
@@ -13,14 +13,8 @@ Measurements Measurements::INSTANCE;
 /**
  * constructs all available measurement engines
  */
-Measurements::Measurements ( ) : measurement_engines ( {
-		new TimeMeasurementEngine ( )
-	} ) {
-}
-
-Measurements::~Measurements ( ) {
-	for ( auto me : measurement_engines )
-		delete me;
+Measurements::Measurements ( ) {
+	measurement_engines.emplace_back ( measurements::make_unique < TimeMeasurementEngine > ( ) );
 }
 
 /**
@@ -28,7 +22,7 @@ Measurements::~Measurements ( ) {
  * @param block_name
  */
 void Measurements::start ( std::string block_name, measurements::Type type ) {
-	for ( auto me : INSTANCE.measurement_engines )
+	for ( auto & me : INSTANCE.measurement_engines )
 		me->push_measurement_frame ( block_name, type );
 }
 
@@ -36,12 +30,12 @@ void Measurements::start ( std::string block_name, measurements::Type type ) {
  * pops the block from the measurements stack
  */
 void Measurements::end ( ) {
-	for ( auto me : INSTANCE.measurement_engines )
+	for ( auto & me : INSTANCE.measurement_engines )
 		me->pop_measurement_frame ( );
 }
 
 void Measurements::print ( std::ostream & os ) {
-	for ( auto me : INSTANCE.measurement_engines )
+	for ( auto & me : INSTANCE.measurement_engines )
 		me->print_as_list ( os );
 }
 
diff --git a/alib2algo/src/measurements/Measurements.hpp b/alib2algo/src/measurements/Measurements.hpp
index 07b6e5885a..1542a8b920 100644
--- a/alib2algo/src/measurements/Measurements.hpp
+++ b/alib2algo/src/measurements/Measurements.hpp
@@ -15,10 +15,9 @@ namespace measurements {
 
 class Measurements {
 private:
-	std::vector < MeasurementEngine * > measurement_engines;
+	std::vector < std::unique_ptr < MeasurementEngine > > measurement_engines;
 
 	Measurements ( );
-	~Measurements ( );
 
 private:
 	static Measurements INSTANCE;
-- 
GitLab