C++11 patchset 6: forbid object copy using assigment/copy function deleters (#5945)
authorLoïc Blot <nerzhul@users.noreply.github.com>
Sat, 10 Jun 2017 11:49:15 +0000 (13:49 +0200)
committerGitHub <noreply@github.com>
Sat, 10 Jun 2017 11:49:15 +0000 (13:49 +0200)
C++11 implement function deleting, it's generally used to prevent some object copy
In script API use this function removal on ScriptApiBase instead of ScriptApiClient/Server/MainMenu, this affect all ScriptApis
Move DISABLE_CLASS_COPY with constructor, the deleted function permit to replace function in its original place

12 files changed:
src/client.h
src/emerge.h
src/environment.h
src/map.h
src/mapgen.h
src/objdef.h
src/script/cpp_api/s_base.h
src/script/scripting_client.h
src/script/scripting_mainmenu.h
src/script/scripting_server.h
src/server.h
src/util/basic_macros.h

index c94936d8508856b5f71c620434e96ed42fec118c..babfe46801772c0bcbdcee061fd098d4f7bbb086 100644 (file)
@@ -272,6 +272,7 @@ public:
        );
 
        ~Client();
+       DISABLE_CLASS_COPY(Client);
 
        void initMods();
 
@@ -691,7 +692,6 @@ private:
        GameUIFlags *m_game_ui_flags;
 
        bool m_shutdown;
-       DISABLE_CLASS_COPY(Client);
 };
 
 #endif // !CLIENT_HEADER
index 2b5d5743462318a5361708333c54c2600eff4795..cf014a9e8e10d32af9223261360da8dbf4848a30 100644 (file)
@@ -119,6 +119,7 @@ public:
        // Methods
        EmergeManager(Server *server);
        ~EmergeManager();
+       DISABLE_CLASS_COPY(EmergeManager);
 
        bool initMapgens(MapgenParams *mgparams);
 
@@ -144,7 +145,6 @@ public:
        Mapgen *getCurrentMapgen();
 
        // Mapgen helpers methods
-       Biome *getBiomeAtPoint(v3s16 p);
        int getSpawnLevelAtPoint(v2s16 p);
        int getGroundLevelAtPoint(v2s16 p);
        bool isBlockUnderground(v3s16 blockpos);
@@ -178,8 +178,6 @@ private:
        bool popBlockEmergeData(v3s16 pos, BlockEmergeData *bedata);
 
        friend class EmergeThread;
-
-       DISABLE_CLASS_COPY(EmergeManager);
 };
 
 #endif
index 4c00ef9e85890c9b83c8d743db02c5ddec3512cf..55fc4707ce1a8ac5c90d2251d8cd22c032d3e16e 100644 (file)
@@ -49,6 +49,7 @@ public:
        // Environment will delete the map passed to the constructor
        Environment(IGameDef *gamedef);
        virtual ~Environment();
+       DISABLE_CLASS_COPY(Environment);
 
        /*
                Step everything in environment.
@@ -121,8 +122,6 @@ protected:
 
 private:
        std::mutex m_time_lock;
-
-       DISABLE_CLASS_COPY(Environment);
 };
 
 #endif
index 0be0e96a37c63ba7e18f958e49962a8a5f3c778d..7fc502793168410411a16c576a78aceb0ec4f267 100644 (file)
--- a/src/map.h
+++ b/src/map.h
@@ -142,11 +142,7 @@ public:
 
        Map(std::ostream &dout, IGameDef *gamedef);
        virtual ~Map();
-
-       /*virtual u16 nodeContainerId() const
-       {
-               return NODECONTAINER_ID_MAP;
-       }*/
+       DISABLE_CLASS_COPY(Map);
 
        virtual s32 mapType() const
        {
@@ -344,8 +340,6 @@ private:
        u32 m_unprocessed_count;
        u64 m_inc_trending_up_start_time; // milliseconds
        bool m_queue_size_timer_started;
-
-       DISABLE_CLASS_COPY(Map);
 };
 
 /*
index 22283801183c1e09bc235494303b2212de8e997c..f5f21388ce5faacc1553c89d3a58b5c849aad1e5 100644 (file)
@@ -192,6 +192,7 @@ public:
        Mapgen();
        Mapgen(int mapgenid, MapgenParams *params, EmergeManager *emerge);
        virtual ~Mapgen();
+       DISABLE_CLASS_COPY(Mapgen);
 
        virtual MapgenType getType() const { return MAPGEN_INVALID; }
 
@@ -233,7 +234,6 @@ private:
        // that checks whether there are floodable nodes without liquid beneath
        // the node at index vi.
        inline bool isLiquidHorizontallyFlowable(u32 vi, v3s16 em);
-       DISABLE_CLASS_COPY(Mapgen);
 };
 
 /*
index 77189e45470d9ecfb11f66f2e87fd086639c5050..1b96fa52a473f8270ea73fff9969e2229ff5dca0 100644 (file)
@@ -59,6 +59,7 @@ class ObjDefManager {
 public:
        ObjDefManager(IGameDef *gamedef, ObjDefType type);
        virtual ~ObjDefManager();
+       DISABLE_CLASS_COPY(ObjDefManager);
 
        virtual const char *getObjectTitle() const { return "ObjDef"; }
 
@@ -91,9 +92,6 @@ protected:
        INodeDefManager *m_ndef;
        std::vector<ObjDef *> m_objects;
        ObjDefType m_objtype;
-
-private:
-       DISABLE_CLASS_COPY(ObjDefManager);
 };
 
 #endif
index e0f6b23aeb05ac60f4b49c4589e622038a015b4f..eda4e73ac6f561ddd78ec66c8b07606b53a87db8 100644 (file)
@@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 #include <iostream>
 #include <string>
+#include "util/basic_macros.h"
 
 extern "C" {
 #include <lua.h>
@@ -66,6 +67,7 @@ class ScriptApiBase {
 public:
        ScriptApiBase();
        virtual ~ScriptApiBase();
+       DISABLE_CLASS_COPY(ScriptApiBase);
 
        // These throw a ModError on failure
        void loadMod(const std::string &script_path, const std::string &mod_name);
index c13fde6071698ddcf0685d2434a817cd4bd2e29a..822bff7735e32c53281fe69ed19479749d1eb1ec 100644 (file)
@@ -24,7 +24,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "cpp_api/s_base.h"
 #include "cpp_api/s_client.h"
 #include "cpp_api/s_security.h"
-#include "util/basic_macros.h"
 
 class Client;
 class LocalPlayer;
@@ -41,6 +40,5 @@ public:
 
 private:
        virtual void InitializeModApi(lua_State *L, int top);
-       DISABLE_CLASS_COPY(ClientScripting);
 };
 #endif
index 7b3a6eba87d45192966c65cff1912923b45afc46..8e251af03b9bace5603882a1536a3c497f3f841d 100644 (file)
@@ -23,7 +23,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "cpp_api/s_base.h"
 #include "cpp_api/s_mainmenu.h"
 #include "cpp_api/s_async.h"
-#include "util/basic_macros.h"
 
 /*****************************************************************************/
 /* Scripting <-> Main Menu Interface                                         */
@@ -47,7 +46,6 @@ private:
        static void registerLuaClasses(lua_State *L, int top);
 
        AsyncEngine asyncEngine;
-       DISABLE_CLASS_COPY(MainMenuScripting);
 };
 
 
index 1b335406e77e9bf4394544bf225013ce96c208ac..fd97ea40b7e54b67a7df2784ae25d3e9a8b3066c 100644 (file)
@@ -28,7 +28,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "cpp_api/s_player.h"
 #include "cpp_api/s_server.h"
 #include "cpp_api/s_security.h"
-#include "util/basic_macros.h"
 
 /*****************************************************************************/
 /* Scripting <-> Server Game Interface                                       */
@@ -51,7 +50,6 @@ public:
 
 private:
        void InitializeModApi(lua_State *L, int top);
-       DISABLE_CLASS_COPY(ServerScripting);
 };
 
 void log_deprecated(const std::string &message);
index 5236851fe2578d680ca174c19f6a3ebf1e870c1b..56706bc61a0b7b0ba71211cb3474ff0aabb2aa22 100644 (file)
@@ -155,6 +155,8 @@ public:
                ChatInterface *iface = NULL
        );
        ~Server();
+       DISABLE_CLASS_COPY(Server);
+
        void start(Address bind_addr);
        void stop();
        // This is mainly a way to pass the time to the server.
@@ -671,8 +673,6 @@ private:
 
        std::unordered_map<std::string, ModMetadata *> m_mod_storages;
        float m_mod_storage_save_timer;
-
-       DISABLE_CLASS_COPY(Server);
 };
 
 /*
index 687d7cf85cbd35266c7990ba66227b3dc14eeefb..71be13a1fbfb01b2f8c325af85b81dd08c5dd2c6 100644 (file)
@@ -33,9 +33,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 // 'Foobar', add the macro DISABLE_CLASS_COPY(Foobar) as a private member.
 // Note this also disables copying for any classes derived from 'Foobar' as well
 // as classes having a 'Foobar' member.
-#define DISABLE_CLASS_COPY(C) \
-       C(const C &);             \
-       C &operator=(const C &)
+#define DISABLE_CLASS_COPY(C)        \
+       C(const C &) = delete;           \
+       C &operator=(const C &) = delete;
 
 #ifndef _MSC_VER
        #define UNUSED_ATTRIBUTE __attribute__ ((unused))