mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	Removed the copy-constructor of JsonDocument (issue #1189)
This commit is contained in:
		
							
								
								
									
										18
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -15,6 +15,7 @@ HEAD | ||||
| * Added `BasicJsonDocument::garbageCollect()` (issue #1195) | ||||
| * Added `StaticJsonDocument::garbageCollect()` | ||||
| * Changed copy-constructor of `BasicJsonDocument` to preserve the capacity of the source. | ||||
| * Removed copy-constructor of `JsonDocument` (issue #1189) | ||||
|  | ||||
| > ### BREAKING CHANGES | ||||
| >  | ||||
| @@ -37,6 +38,23 @@ HEAD | ||||
| > I made this change to get consistent results between copy-constructor and move-constructor, and whether RVO applies or not. | ||||
| > | ||||
| > If you use the copy-constructor to optimize your documents, you can use `garbageCollect()` or `shrinkToFit()` instead. | ||||
| > | ||||
| > #### Copy-constructor of `JsonDocument` | ||||
| > | ||||
| > In previous versions, it was possible to create a function that take a `JsonDocument` by value. | ||||
| > | ||||
| > ```c++ | ||||
| > void myFunction(JsonDocument doc) {} | ||||
| > ``` | ||||
| > | ||||
| > This function gives the wrong clues because it doesn't receive a copy of the `JsonDocument`, only a sliced version. | ||||
| > It worked because the copy constructor copied the internal pointers, but it was an accident. | ||||
| > | ||||
| > From now, if you need to pass a `JsonDocument` to a function, you must use a reference: | ||||
| > | ||||
| > ```c++ | ||||
| > void myFunction(JsonDocument& doc) {} | ||||
| > ``` | ||||
|  | ||||
| v6.14.1 (2020-01-27) | ||||
| ------- | ||||
|   | ||||
| @@ -20,23 +20,35 @@ set_target_properties(MiscTests PROPERTIES UNITY_BUILD OFF) | ||||
|  | ||||
| add_test(Misc MiscTests) | ||||
|  | ||||
| macro(build_should_fail target) | ||||
| 	set_target_properties(${target} | ||||
| 		PROPERTIES | ||||
| 	    	EXCLUDE_FROM_ALL TRUE | ||||
| 	        EXCLUDE_FROM_DEFAULT_BUILD TRUE | ||||
| 	) | ||||
| 	add_test( | ||||
| 		NAME | ||||
| 			${target} | ||||
| 	    COMMAND | ||||
| 	    	${CMAKE_COMMAND} --build . --target ${target} --config $<CONFIGURATION> | ||||
| 	    WORKING_DIRECTORY | ||||
| 	    	${CMAKE_BINARY_DIR} | ||||
| 	) | ||||
| 	set_tests_properties(${target}  | ||||
|  | ||||
|  | ||||
|  | ||||
| 		PROPERTIES | ||||
| 			WILL_FAIL TRUE) | ||||
| endmacro() | ||||
|  | ||||
|  | ||||
| add_executable(Issue978 | ||||
| 	Issue978.cpp | ||||
| ) | ||||
| set_target_properties(Issue978 | ||||
| 	PROPERTIES | ||||
|     	EXCLUDE_FROM_ALL TRUE | ||||
|         EXCLUDE_FROM_DEFAULT_BUILD TRUE | ||||
| build_should_fail(Issue978) | ||||
|  | ||||
| add_executable(Issue1189 | ||||
| 	Issue1189.cpp | ||||
| ) | ||||
| add_test( | ||||
| 	NAME | ||||
| 		Issue978 | ||||
|     COMMAND | ||||
|     	${CMAKE_COMMAND} --build . --target Issue978 --config $<CONFIGURATION> | ||||
|     WORKING_DIRECTORY | ||||
|     	${CMAKE_BINARY_DIR} | ||||
| ) | ||||
| set_tests_properties(Issue978  | ||||
| 	PROPERTIES | ||||
| 		WILL_FAIL TRUE) | ||||
| build_should_fail(Issue1189) | ||||
|   | ||||
							
								
								
									
										13
									
								
								extras/tests/Misc/Issue1189.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								extras/tests/Misc/Issue1189.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| // ArduinoJson - arduinojson.org | ||||
| // Copyright Benoit Blanchon 2014-2020 | ||||
| // MIT License | ||||
|  | ||||
| #include <ArduinoJson.h> | ||||
|  | ||||
| // a function should not be able to get a JsonDocument by value | ||||
| void f(JsonDocument) {} | ||||
|  | ||||
| int main() { | ||||
|   DynamicJsonDocument doc(1024); | ||||
|   f(doc); | ||||
| } | ||||
| @@ -319,6 +319,10 @@ class JsonDocument : public Visitable { | ||||
|  | ||||
|   MemoryPool _pool; | ||||
|   VariantData _data; | ||||
|  | ||||
|  private: | ||||
|   JsonDocument(const JsonDocument&); | ||||
|   JsonDocument& operator=(const JsonDocument&); | ||||
| }; | ||||
|  | ||||
| }  // namespace ARDUINOJSON_NAMESPACE | ||||
|   | ||||
		Reference in New Issue
	
	Block a user