Prechádzať zdrojové kódy

[Core] Prevent copying of `SelfList` and `SelfList::List`

Copying of these types is unsafe and should be detected

Also removed unnecessary constructors for `TileMap` `DebugQuadrant` and
`RenderingQuadrant` which used copying of `SelfList::List`
A Thousand Ships 1 rok pred
rodič
commit
904ecb1d36
2 zmenil súbory, kde vykonal 6 pridanie a 16 odobranie
  1. 6 0
      core/templates/self_list.h
  2. 0 16
      scene/2d/tile_map_layer.h

+ 6 - 0
core/templates/self_list.h

@@ -159,6 +159,9 @@ public:
 		_FORCE_INLINE_ SelfList<T> *first() { return _first; }
 		_FORCE_INLINE_ const SelfList<T> *first() const { return _first; }
 
+		// Forbid copying, which has broken behavior.
+		void operator=(const List &) = delete;
+
 		_FORCE_INLINE_ List() {}
 		_FORCE_INLINE_ ~List() {
 			// A self list must be empty on destruction.
@@ -185,6 +188,9 @@ public:
 	_FORCE_INLINE_ const SelfList<T> *prev() const { return _prev; }
 	_FORCE_INLINE_ T *self() const { return _self; }
 
+	// Forbid copying, which has broken behavior.
+	void operator=(const SelfList<T> &) = delete;
+
 	_FORCE_INLINE_ SelfList(T *p_self) {
 		_self = p_self;
 	}

+ 0 - 16
scene/2d/tile_map_layer.h

@@ -173,14 +173,6 @@ public:
 
 	SelfList<DebugQuadrant> dirty_quadrant_list_element;
 
-	// For those, copy everything but SelfList elements.
-	DebugQuadrant(const DebugQuadrant &p_other) :
-			dirty_quadrant_list_element(this) {
-		quadrant_coords = p_other.quadrant_coords;
-		cells = p_other.cells;
-		canvas_item = p_other.canvas_item;
-	}
-
 	DebugQuadrant() :
 			dirty_quadrant_list_element(this) {
 	}
@@ -213,14 +205,6 @@ public:
 
 	SelfList<RenderingQuadrant> dirty_quadrant_list_element;
 
-	// For those, copy everything but SelfList elements.
-	RenderingQuadrant(const RenderingQuadrant &p_other) :
-			dirty_quadrant_list_element(this) {
-		quadrant_coords = p_other.quadrant_coords;
-		cells = p_other.cells;
-		canvas_items = p_other.canvas_items;
-	}
-
 	RenderingQuadrant() :
 			dirty_quadrant_list_element(this) {
 	}