summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2013-06-15 15:06:22 +0000
committerfrosch <frosch@openttd.org>2013-06-15 15:06:22 +0000
commit18ae9c78bc238ec3f51b778226d4769cee030f39 (patch)
treec6d36b45018632d11cb83988aa65d1c508fc98fc
parentbb308c5e30d373272811c0031b13eea46d79dba0 (diff)
downloadopenttd-18ae9c78bc238ec3f51b778226d4769cee030f39.tar.xz
(svn r25402) -Fix-ish: Prevent copying of BasePool and WindowDesc, since they register in static vectors.
-rw-r--r--src/core/pool_type.hpp7
-rw-r--r--src/window.cpp1
-rw-r--r--src/window_gui.h7
3 files changed, 15 insertions, 0 deletions
diff --git a/src/core/pool_type.hpp b/src/core/pool_type.hpp
index 131b5cef7..f19e44479 100644
--- a/src/core/pool_type.hpp
+++ b/src/core/pool_type.hpp
@@ -59,6 +59,13 @@ struct PoolBase {
* Virtual method that deletes all items in the pool.
*/
virtual void CleanPool() = 0;
+
+private:
+ /**
+ * Dummy private copy constructor to prevent compilers from
+ * copying the structure, which fails due to GetPools().
+ */
+ PoolBase(const PoolBase &other);
};
/**
diff --git a/src/window.cpp b/src/window.cpp
index e4041c319..40b710044 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -106,6 +106,7 @@ WindowDesc::WindowDesc(WindowPosition def_pos, const char *ini_key, int16 def_wi
WindowDesc::~WindowDesc()
{
+ _window_descs->Erase(_window_descs->Find(this));
}
/**
diff --git a/src/window_gui.h b/src/window_gui.h
index 6288aadc1..c5c37be85 100644
--- a/src/window_gui.h
+++ b/src/window_gui.h
@@ -197,6 +197,13 @@ struct WindowDesc : ZeroedMemoryAllocator {
static void LoadFromConfig();
static void SaveToConfig();
+
+private:
+ /**
+ * Dummy private copy constructor to prevent compilers from
+ * copying the structure, which fails due to _window_descs.
+ */
+ WindowDesc(const WindowDesc &other);
};
/**