Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania i odpowiedzi
Viewing all articles
Browse latest Browse all 83220

Odpowiedź: use of deleted function - poprawna składnia i problem

$
0
0

std::vector::push_back wykorzystuje kosntruktor kopiujący, ale od c++11 jest też push_back przyjmujące referencje do rwartości (rvalue reference) i z tego możesz skorzystać skoro konstruktor kopiujący jest delete. Najlepiej jakbyś pokazał jak wygląda u ciebie dodawanie do vectora (pokaż linie kodu). 

Anyway, jeśli klasa nie ma konstruktora kopiującego, to masz musisz skorzystać z push_back(Typ&&):

//v to vector
v.push_back(Klasa()); // od razu podajesz mu rvalue
//albo:
Klasa k; 
/* coś robisz z tym obiektem
a nastepnie zmuszasz push_back aby potraktował go jako rvalue: */
v.push_back(std::move(k));
// po tym absolutnie już nie ruszaj obiektu k, bo konstruktor przenoszący pozostawił 
// go w niezdefiniowanym stanie
// zakładam, że to sie dzieje w jakiejś funkcji i k jest obiektem lokalnym, który
zniknie po wyjściu z funkcji

Drugą możliwością jest skorzystanie z emplace_back również dostępnego od c++11. Emplace back przyjmuje argumenty, które następnie zostaną przekazane do zwykłego konstruktora i emplace_back sama sobie stworzy obiekt na końcu kontenera.

np.:

class A
{
  public: A(int, float, std::string) { } 
};

std::vector<A> v;
v.emplace_back(1, 1.f, "lkfjlsf");

 


Viewing all articles
Browse latest Browse all 83220

Trending Articles


Sprawdź z którą postacią z anime dzielisz urodziny


MDM - Muzyka Dla Miasta (2009)


Częstotliwość 3.722MHz


POSZUKIWANY TOMASZ SKOWRON-ANGLIA


Ciasto 3 Bit


Kasowanie inspekcji Hyundai ix35


Steel Division 2 SPOLSZCZENIE


SZCZOTKOWANIE TWARZY NA SUCHO


Potrzebuje schemat budowy silnika YX140


Musierowicz Małgorzata - Kwiat kalafiora [audiobook PL]