E' più veloce copiare un file di 50MB in un'altra directory o spostarlo in quella directory?Originariamente inviato da giuseppe500
Mi chiedevo se posso trarre un guadagno di memoria e tempo usando le move semantics?
Così non sposti proprio nulla: ottieni solo una zona di memoria da manipolare a piacimento e se perdi il riferimento a quella zona di memoria sei fritto (traslasciando il fatto che in questa specifica funzione restituire un puntatore a un std::vector<> è assurdo).quello che non riesco a capire è questo : non basta usare un riferimento per spostare i dati?
o le move semantics servono solo per le copie dei dati?Come per es fare un clone del modello 3d
codice:std::vector<std::string>* get_big_vector() { std::vector<std::string>* pTemp = new std::vector<std::string>(); pTemp->resize(4000 * 1024); // 4MB /* varie operazioni sul vector */ return pTemp; }
Il fatto che il C++11 abbia introdotto la move semantics è per evitare copie inutili durante il passaggio di temporanei (move semantics implicita), o passaggio di variabili che si creano nelle funzioni e che in teoria muoiono li (move semantics esplicita con std::move()). Questo rende più efficiente il passaggio di parametri in entrata e uscita dalle funzioni.
Scope e vantaggio di questo meccanismo è di evitare (per quanto possibile) di maneggiare dati nel modo su riportato.
Ti faccio io una domanda: secondo te perché il C++ ha introdotto i vari container (list, vector, string) e gli smart pointer (unique_ptr, shared_ptr)?