przeniesienie zamiast kopiowania

0
class KlasaBuffer
{
public:
	std::vector<int> bigArray;

	void load()
	{
		bigArray.reserve(1024);
	}
};
class Klasa
{
	std::vector<int> bigArray;
public:

	Klasa(KlasaBuffer&& buffer)
		: bigArray(buffer.bigArray)
	{

	}
};
int main()
{
	KlasaBuffer buffer;
	buffer.load();

	Klasa klasa(std::move(buffer));
}

Czy to jest dobrze napisane? Chciałbym uniknąć kopiowania bigArray, nie za bardzo wiem kiedy używać std::move oraz &&.

1

W tej chwili kopiujesz. Potrzebujesz

bigArray(move(buffer.bigArray))
0

Czy teraz jest to poprawne? @_13th_Dragon Nie wiem, Buffer nie jest mi potrzebny po przeniesieniu tej tablicy i moze zostać zniszczony.

class KlasaBuffer
{
public:
    std::vector<int> bigArray;
 
    void load()
    {
        bigArray.reserve(1024);
    }
};
class Klasa
{
    std::vector<int> bigArray;
public:
 
    Klasa(KlasaBuffer& buffer) // referencja
        : bigArray(std::move(buffer.bigArray))
    {
 
    }
};
int main()
{
    KlasaBuffer buffer;
    buffer.load();
 
    Klasa klasa(buffer);
}
0

Jeśli dobrze rozumiem to przeniesienie polega na zmianie adresu do tych bajtów a nie samych bajtów.

1

Wsadź sobie load() do konstruktora, po czym używaj jako: Klasa klasa(KlasaBuffer()); - wtedy to ma jakiś tam sens, przy odpowiedniej rozbudowie.

1
Klasa(KlasaBuffer& buffer)

Bez sensu. Dobrze było z &&.

Klasa klasa(buffer);

Drugie bez sensu. Musisz stosować move na zmiennej, żeby powiedzieć kompilatorowi, że chcesz przenieść jej zawartość do czegoś innego. Ew. używać zmiennej tymczasowej tak jak @_13th_Dragon zasugerował.

1 użytkowników online, w tym zalogowanych: 0, gości: 1