2
0
Эх сурвалжийг харах

Core: Identity compare objects by id, not by pointers

Dmitrii Maganov 2 жил өмнө
parent
commit
c5f7a89b0f

+ 1 - 1
core/variant/variant.cpp

@@ -3499,7 +3499,7 @@ bool Variant::identity_compare(const Variant &p_variant) const {
 
 
 	switch (type) {
 	switch (type) {
 		case OBJECT: {
 		case OBJECT: {
-			return _get_obj().obj == p_variant._get_obj().obj;
+			return _get_obj().id == p_variant._get_obj().id;
 		} break;
 		} break;
 
 
 		case DICTIONARY: {
 		case DICTIONARY: {

+ 8 - 0
tests/core/variant/test_variant.h

@@ -1056,6 +1056,14 @@ TEST_CASE("[Variant] Identity comparison") {
 	Variant obj_null_two_var = Variant((Object *)nullptr);
 	Variant obj_null_two_var = Variant((Object *)nullptr);
 	CHECK(obj_null_one_var.identity_compare(obj_null_one_var));
 	CHECK(obj_null_one_var.identity_compare(obj_null_one_var));
 	CHECK(obj_null_one_var.identity_compare(obj_null_two_var));
 	CHECK(obj_null_one_var.identity_compare(obj_null_two_var));
+
+	Object *freed_one = new Object();
+	Variant freed_one_var = freed_one;
+	delete freed_one;
+	Object *freed_two = new Object();
+	Variant freed_two_var = freed_two;
+	delete freed_two;
+	CHECK_FALSE(freed_one_var.identity_compare(freed_two_var));
 }
 }
 
 
 TEST_CASE("[Variant] Nested array comparison") {
 TEST_CASE("[Variant] Nested array comparison") {