2017-09-20 2 views
1

Ich versuche, den Sinn von intelligenten Zeigern zu bekommen. Ich habe einen Vektor von unique_ptr zu Double-Array, die ich erstellen kann, aber nicht darauf zugreifen kann. JetztWie greife ich auf einen Vektor von unique_ptr zu

vector<unique_ptr<double[]>> arrDoubles; 

//... 

unique_ptr<double[]>dataArr(new double[size]); 
arrDoubles.push_back(move(dataArr)); 

,

auto datAr = arrDoubles[0]; 

gibt folgendes:

error: use of deleted function ‘std::unique_ptr<_Tp [], _Dp>::unique_ptr(const std::unique_ptr<_Tp [], _Dp>&) [with _Tp = double; _Dp = std::default_delete<double []>]’ 
+2

Weil 'Auto Datar = arrDoubles [0];' Versuche, eine 'unique_ptr' kopieren-Konstrukt, und, wie Sie wissen,' std :: unique_ptr' nicht Kopierkonstruktoren hat. –

+0

Ja, Sie haben Recht. –

Antwort

6

Sie versuchen, eine Kopie eines unique_ptr zu schaffen, die nicht getan werden kann. Verwenden Sie eine Referenz.

auto& datAr = arrDoubles[0]; 
+0

Danke, das hat funktioniert! Ich verstehe, warum es nicht so gut funktioniert hat. –

+0

@GhanshyamBhutra - Dann markieren Sie diese Antwort als akzeptiert, wenn es Ihr Problem löst – StoryTeller

+0

Fertig. Danke @StoryTeller –

Verwandte Themen