Index: src/AllocatedArray.h
===================================================================
new file mode 100644
--- /dev/null
+++ b/src/AllocatedArray.h
@@ -0,0 +1,90 @@
+/*
+ * This file is part of Adblock Plus ,
+ * Copyright (C) 2006-2016 Eyeo GmbH
+ *
+ * Adblock Plus is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3 as
+ * published by the Free Software Foundation.
+ *
+ * Adblock Plus is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Adblock Plus. If not, see .
+ */
+
+#if !defined(ALLOCATED_ARRAY_H)
+#define ALLOCATED_ARRAY_H
+
+template
+class AllocatedArray
+{
+ size_t size;
+ std::unique_ptr p;
+
+ /**
+ * Copy constructor deleted. Allocation is unique to single object.
+ */
+ AllocatedArray(const AllocatedArray&); // = delete
+ /**
+ * Copy assignment deleted. Allocation is unique to single object.
+ */
+ AllocatedArray& operator=(const AllocatedArray&); // = delete
+
+public:
+ /**
+ * Default constructor. No allocation.
+ */
+ AllocatedArray()
+ : size(0),
+ p()
+ {}
+
+ /**
+ * Length constructor.
+ * Initializes each element with default constructor of T().
+ * Does no allocation if `n` is zero.
+ */
+ AllocatedArray(size_t n)
+ : size(n),
+ p(n > 0 ? new T[n] : nullptr) // TODO: make_unique once available
+ {}
+
+ AllocatedArray(AllocatedArray&& x) // = default;
+ {
+ size = x.size;
+ std::swap(p, x.p);
+ }
+
+ AllocatedArray& operator=(AllocatedArray&& x) // = default;
+ {
+ size = x.size;
+ std::swap(p, x.p);
+ return *this;
+ }
+
+ T& operator[](size_t i) const
+ {
+ return p.get()[i];
+ }
+
+ T* Get() const
+ {
+ return p.get();
+ }
+
+ void Reset()
+ {
+ size = 0;
+ p.reset();
+ }
+
+ size_t Size() const
+ {
+ return size;
+ }
+};
+
+#endif