Przerabiam pewien program w C++ i pewna operacja wygląda mniej więcej tak:
Plik H
class KlasaWykonawczaOperacji
{
vector<char> Dane;
void PodajDane(vector<char> &Blob);
void PobierzWynik(vector<char> &Blob);
void Czynnosc1();
void Czynnosc2();
void Czynnosc3();
static void KlasaWykonawczaOperacji::WykonajOperacje(vector<char> &Blob);
}
Plik CPP
void PodajDane(vector<char> &Blob)
{
Dane = Blob;
}
void PobierzWynik(vector<char> &Blob)
{
Blob = Dane;
}
void Czynnosc1()
{
// Jakies operacje na wektorze Dane
}
void Czynnosc2()
{
// Jakies operacje na wektorze Dane
}
void Czynnosc3()
{
// Jakies operacje na wektorze Dane
}
void WykonajOperacje(vector<char> &Blob)
{
KlasaWykonawczaOperacji Obj;
Obj.PodajDane(Blob);
Obj.Czynnosc1();
Obj.Czynnosc2();
Obj.Czynnosc3();
Obj.PobierzWynik(Blob);
}
Generalnie chodzi o to, że mam wektor i wykonuje na nim pewne operacje w ten sposób, że tworzę obiekt, wprowadzam do pola globalnego wektor danych, wykonuję jakieś czynności i wyciągam wynik. W rzeczywistości metod jest dużo więcej i wiele z nich operuje na polach globalnych, więc ciężko zrezygnować z pola globalnego danych.
Wszystko jest dobrze, ale zauważyłem, że instrukcja zawarta w metodach PodajDane i PobierzWynik tak naprawdę kopiuje wektor, co przy bardzo dużych wektorach może mieć znaczenie jeśli chodzi o zajętość programu. Natomiast myślałem nad zrobieniem pola vector<int>* na stercie, ale tu jest inny problem, mianowicie obiekt na stercie ma dłuższy czas dostępu, co obniża wydajność programu, przynajmniej teoretycznie, tak pisze chyba każdy tutorial c++ w temacie różnicy między obiektem na stosie i na stercie.
Jak przerobić program, a szczególnie metody PodajDane i PobierzWynik, żeby przekazać wektor tak, żeby wszystkie czynności odbywały się na tym sam egzemplarzu wektora, który jest podawany jako argument metody WykonajOperacje a jednocześnie, żeby dostęp do wektora był jak najszybszy? Teoretycznie po tej przeróbce, metoda PobierzWynik przestanie być potrzebna.
Próbowałem też wykorzystać metodę "assign" dostępną dla obiektu wektora, ale z tego, co zauważyłem, ona również robi kopię zawartości pamięci, do której wskaźnik się podaje, co mija się z celem.