From db54e208256958f721bf74bf058b45039be5b488 Mon Sep 17 00:00:00 2001 From: rubidium42 Date: Wed, 26 May 2021 21:48:28 +0200 Subject: Change: mark copy-assignment as deleted for classes with a copy-constructor that is not trivial This to prevent the default copy-assignment getting used when during the assignment also some other memory needs to be allocated as that would otherwise be freed. --- src/error.h | 3 +++ src/newgrf_config.h | 6 ++++++ 2 files changed, 9 insertions(+) (limited to 'src') diff --git a/src/error.h b/src/error.h index 6dd4b0234..9c445fc48 100644 --- a/src/error.h +++ b/src/error.h @@ -44,6 +44,9 @@ public: ~ErrorMessageData(); ErrorMessageData(StringID summary_msg, StringID detailed_msg, uint duration = 0, int x = 0, int y = 0, const GRFFile *textref_stack_grffile = nullptr, uint textref_stack_size = 0, const uint32 *textref_stack = nullptr); + /* Remove the copy assignment, as the default implementation will not do the right thing. */ + ErrorMessageData &operator=(ErrorMessageData &rhs) = delete; + /** Check whether error window shall display a company manager face */ bool HasFace() const { return face != INVALID_COMPANY; } diff --git a/src/newgrf_config.h b/src/newgrf_config.h index ef7128905..1588f8c3a 100644 --- a/src/newgrf_config.h +++ b/src/newgrf_config.h @@ -113,6 +113,9 @@ struct GRFError { GRFError(StringID severity, StringID message = 0); GRFError(const GRFError &error); + /* Remove the copy assignment, as the default implementation will not do the right thing. */ + GRFError &operator=(GRFError &rhs) = delete; + std::string custom_message; ///< Custom message (if present) std::string data; ///< Additional data for message and custom_message StringID message; ///< Default message @@ -154,6 +157,9 @@ struct GRFConfig : ZeroedMemoryAllocator { GRFConfig(const GRFConfig &config); ~GRFConfig(); + /* Remove the copy assignment, as the default implementation will not do the right thing. */ + GRFConfig &operator=(GRFConfig &rhs) = delete; + GRFIdentifier ident; ///< grfid and md5sum to uniquely identify newgrfs uint8 original_md5sum[16]; ///< MD5 checksum of original file if only a 'compatible' file was loaded char *filename; ///< Filename - either with or without full path -- cgit v1.2.3-70-g09d2