forked from bblanchon/ArduinoJson
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