Return JsonDocument from class methods
Laxilef opened this issue · 2 comments
Hi,
Question about optimization when returning JsonDocument
from class methods. Let's say there is code:
JsonDocument Bot::getUpdates(long offset, unsigned short limit) {
JsonDocument payload;
payload["offset"] = offset;
payload["limit"] = limit;
unsigned short timeout = 0;
if (this->longPollTime > 0) {
payload["timeout"] = this->longPollTime;
timeout = this->longPollTime * 1000u + this->timeout;
}
auto response = this->sendRequest("POST", "getUpdates", payload, timeout);
if (!response.isNull() && response.is<JsonArray>()) {
// some code
}
return response;
}
JsonDocument Bot::getUpdates(long offset) {
return this->getUpdates(offset, this->messagesLimit);
}
JsonDocument Bot::getUpdates() {
return this->getUpdates(this->offset + 1, this->messagesLimit);
}
In the first Bot::getUpdates()
method I create a JsonDocument
and the other methods are helpers. If I understand correctly, then every time the JsonDocument
will be copied at each nesting level and create an extra load?
The problem is that there can be more nesting levels. Would it be more correct to pass JsonDocument
by reference to a method or is there a more elegant way? Thank you!
Hi @Laxilef,
The second and third getUpdates()
overloads won't create copies of the returned JsonDocument
because of the copy elision mechanism. Even if copy elision didn't trigger, JsonDocument
is move-contructible, so it would not produce a copy.
Passing by reference would work, too, but it would be less elegant.
Best regards,
Benoit
Thanks!