Ich implementiere eine Factory-Klasse, die einen Vektor von uint8_t erstellt. Ich möchte in der Lage sein, die Bewegungssemantik zu verwenden, wenn der resultierende Vektor zurückgegeben wird. Das scheint zu funktionieren, aber ich bin nicht zuversichtlich, dass dies der richtige Weg ist, um das zu erreichen, was ich will.Wie verwende ich die Bewegungssemantik beim Zurückgeben einer Elementvariablen?
Ich habe einige Beispiele gesehen, wie eine zurückgegebene automatische Variable als rvalue betrachtet wird und den Move-Konstruktor des aufrufenden Codes verwendet, aber in meinem Beispiel ist das zurückgegebene Objekt ein Member. Ich weiß, dass das Mitglied seinen Inhalt verliert, wenn der Aufrufer den Rückgabewert in einen Move-Konstruktor einfügt - und genau das möchte ich.
ich habe so etwas wie folgt geschrieben:
#include <cstdint>
#include <iostream>
#include <vector>
class Factory
{
public:
std::vector<uint8_t> _data;
Factory(std::size_t size) :
_data(size, 0)
{
}
void buildContent(int param)
{
// perform operations on the contents of _data
}
std::vector<uint8_t> && data()
{
return std::move(_data);
}
};
int main()
{
Factory factory(42);
factory.buildContent(1);
std::vector<uint8_t> temp(factory.data());
std::cout << "temp has " << temp.size() << " elements" << std::endl;
std::cout << "factory._data has " << factory._data.size() << " elements" << std::endl;
return 0;
}
Edit:
Oh, und den Beispielcode gibt die folgenden:
temp has 42 elements
factory._data has 0 elements
Also, was ist Ihre Frage? – DanielKO
"Ich bin nicht davon überzeugt, dass dies der richtige Weg ist, um das zu erreichen, was ich will." – Geoffroy
Oh, ich sehe jetzt. Überprüfen Sie dieses eine: http://StackOverflow.com/Questions/9914548/using-of-Rvalue-References-in-C11 – DanielKO