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 `BasicJsonDocument::garbageCollect()` (issue #1195) | ||||||
| * Added `StaticJsonDocument::garbageCollect()` | * Added `StaticJsonDocument::garbageCollect()` | ||||||
| * Changed copy-constructor of `BasicJsonDocument` to preserve the capacity of the source. | * Changed copy-constructor of `BasicJsonDocument` to preserve the capacity of the source. | ||||||
|  | * Removed copy-constructor of `JsonDocument` (issue #1189) | ||||||
|  |  | ||||||
| > ### BREAKING CHANGES | > ### 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. | > 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. | > 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) | v6.14.1 (2020-01-27) | ||||||
| ------- | ------- | ||||||
|   | |||||||
| @@ -20,23 +20,35 @@ set_target_properties(MiscTests PROPERTIES UNITY_BUILD OFF) | |||||||
|  |  | ||||||
| add_test(Misc MiscTests) | 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 | add_executable(Issue978 | ||||||
| 	Issue978.cpp | 	Issue978.cpp | ||||||
| ) | ) | ||||||
| set_target_properties(Issue978 | build_should_fail(Issue978) | ||||||
| 	PROPERTIES |  | ||||||
|     	EXCLUDE_FROM_ALL TRUE | add_executable(Issue1189 | ||||||
|         EXCLUDE_FROM_DEFAULT_BUILD TRUE | 	Issue1189.cpp | ||||||
| ) | ) | ||||||
| add_test( | build_should_fail(Issue1189) | ||||||
| 	NAME |  | ||||||
| 		Issue978 |  | ||||||
|     COMMAND |  | ||||||
|     	${CMAKE_COMMAND} --build . --target Issue978 --config $<CONFIGURATION> |  | ||||||
|     WORKING_DIRECTORY |  | ||||||
|     	${CMAKE_BINARY_DIR} |  | ||||||
| ) |  | ||||||
| set_tests_properties(Issue978  |  | ||||||
| 	PROPERTIES |  | ||||||
| 		WILL_FAIL TRUE) |  | ||||||
|   | |||||||
							
								
								
									
										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; |   MemoryPool _pool; | ||||||
|   VariantData _data; |   VariantData _data; | ||||||
|  |  | ||||||
|  |  private: | ||||||
|  |   JsonDocument(const JsonDocument&); | ||||||
|  |   JsonDocument& operator=(const JsonDocument&); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| }  // namespace ARDUINOJSON_NAMESPACE | }  // namespace ARDUINOJSON_NAMESPACE | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user