Index: src/InitTweak/FixGlobalInit.cc
===================================================================
--- src/InitTweak/FixGlobalInit.cc	(revision b8baa37eb2d4983aa6519224b93c9a92306453af)
+++ src/InitTweak/FixGlobalInit.cc	(revision 68f9c43ecf1873cbb5f06aee682704b56612ed16)
@@ -57,13 +57,9 @@
 		GlobalFixer & fixer = visitor.pass;
 		// don't need to include function if it's empty
-		if ( fixer.initFunction->get_statements()->get_kids().empty() ) {
-			delete fixer.initFunction;
-		} else {
+		if ( ! fixer.initFunction->get_statements()->get_kids().empty() ) {
 			translationUnit.push_back( fixer.initFunction );
 		} // if
 
-		if ( fixer.destroyFunction->get_statements()->get_kids().empty() ) {
-			delete fixer.destroyFunction;
-		} else {
+		if ( ! fixer.destroyFunction->get_statements()->get_kids().empty() ) {
 			translationUnit.push_back( fixer.destroyFunction );
 		} // if
@@ -130,5 +126,4 @@
 				objDecl->set_init( NULL );
 			} // if
-			delete ctorInit;
 		} // if
 	}
Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision b8baa37eb2d4983aa6519224b93c9a92306453af)
+++ src/InitTweak/FixInit.cc	(revision 68f9c43ecf1873cbb5f06aee682704b56612ed16)
@@ -454,5 +454,4 @@
 				resolved->env = nullptr;
 			} // if
-			delete stmt;
 			if ( TupleAssignExpr * assign = dynamic_cast< TupleAssignExpr * >( resolved ) ) {
 				// fix newly generated StmtExpr
@@ -554,8 +553,5 @@
 				result = result->clone();
 				env->apply( result );
-				if ( ! InitTweak::isConstructable( result ) ) {
-					delete result;
-					return;
-				}
+				if ( ! InitTweak::isConstructable( result ) ) return;
 
 				// create variable that will hold the result of the stmt expr
@@ -652,5 +648,4 @@
 			std::swap( impCpCtorExpr->env, callExpr->env );
 			assert( impCpCtorExpr->env == nullptr );
-			delete impCpCtorExpr;
 
 			if ( returnDecl ) {
@@ -711,7 +706,5 @@
 			if ( unqMap.count( unqExpr->get_id() ) ) {
 				// take data from other UniqueExpr to ensure consistency
-				delete unqExpr->get_expr();
 				unqExpr->set_expr( unqMap[unqExpr->get_id()]->get_expr()->clone() );
-				delete unqExpr->get_result();
 				unqExpr->set_result( maybeClone( unqExpr->get_expr()->get_result() ) );
 				if ( unqCount[ unqExpr->get_id() ] == 0 ) {  // insert destructor after the last use of the unique expression
@@ -824,7 +817,8 @@
 							// create a new object which is never used
 							static UniqueName dummyNamer( "_dummy" );
-							ObjectDecl * dummy = new ObjectDecl( dummyNamer.newName(), Type::StorageClasses( Type::Static ), LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new VoidType( Type::Qualifiers() ) ), 0, std::list< Attribute * >{ new Attribute("unused") } );
-							delete ctorInit;
-							return dummy;
+							return new ObjectDecl{
+								dummyNamer.newName(), Type::StorageClasses( Type::Static ), LinkageSpec::Cforall, 0, 
+								new PointerType{ Type::Qualifiers(), new VoidType( Type::Qualifiers() ) }, 
+								0, std::list< Attribute * >{ new Attribute("unused") } };
 						}
 					} else {
@@ -852,5 +846,4 @@
 					objDecl->init = nullptr;
 				} // if
-				delete ctorInit;
 			} // if
 			return objDecl;
@@ -1228,5 +1221,4 @@
 			ObjectDecl * tmp = ObjectDecl::newObject( tempNamer.newName(), callExpr->args.front()->result->clone(), nullptr );
 			declsToAddBefore.push_back( tmp );
-			delete ctorExpr;
 
 			// build assignment and replace constructor's first argument with new temporary
@@ -1237,5 +1229,4 @@
 			// resolve assignment and dispose of new env
 			ResolvExpr::findVoidExpression( assign, indexer );
-			delete assign->env;
 			assign->env = nullptr;
 
Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision b8baa37eb2d4983aa6519224b93c9a92306453af)
+++ src/InitTweak/InitTweak.cc	(revision 68f9c43ecf1873cbb5f06aee682704b56612ed16)
@@ -122,5 +122,5 @@
 	public:
 		ExprImpl( Expression * expr ) : arg( expr ) {}
-		virtual ~ExprImpl() { delete arg; }
+		virtual ~ExprImp() = default;
 
 		virtual std::list< Expression * > next( std::list< Expression * > & indices ) {
@@ -166,5 +166,4 @@
 
 	void InitExpander::clearArrayIndices() {
-		deleteAll( indices );
 		indices.clear();
 	}
@@ -263,5 +262,4 @@
 		build( dst, indices.begin(), indices.end(), init, back_inserter( block->get_kids() ) );
 		if ( block->get_kids().empty() ) {
-			delete block;
 			return nullptr;
 		} else {
