Ich habe vor kurzem begonnen, Boost Lambda zu verwenden und dachte, ich würde versuchen, es an Orten zu verwenden, wo es Dinge leichter lesbar machen soll.Wie Boost Lambda zu verwenden, um einen Vektor von Zeigern mit neuen Objekten zu bevölkern
Ich habe einige Code ähnlich dem folgenden
std::vector< X * > v;
for (int i = 0 ; i < 20 ; ++i)
v.push_back(new X());
und später, um es zu löschen ...
std::for_each(v.begin(), v.end(), boost::lamda::delete_ptr());
Welche aufräumt ordentlich.
Aber ich dachte, dass ich mal ran würde bei „Lambda-ising“ die Bevölkerung des Vektors Lambda mit ... Das ist dann das Feuerwerk begann ...
Ich versuchte ..
std::generate_n(v.begin(), 20, _1 = new X());
, aber das warf alle Arten von Compiler-Fehlern.
Alle Ideen, die der beste "Lambda" Weg ist, dies zu erreichen.
Thx Mark.
Im Allgemeinen nicht dynamisch zugewiesene Zeiger in einem Vektor speichern - Ihr Code ist nicht ausnahmesicher und wird Speicher verlieren, wenn ein Konstruktor von X fehlschlägt. –
Hallo Joe, ich wäre daran interessiert, dies zu erweitern. Ich bin nicht sicher, wie der Konstruktor von X fehlschlagen und Speicher verlieren könnte. Ich dachte, dass der C++ - Standard sagte, dass angesichts von Ausnahmen neu null zurückgegeben wird und den Speicher aufräumt, bevor die Ausnahme erneut ausgelöst wird. Natürlich könnte ich völlig falsch liegen. – ScaryAardvark
@ScaryAardvark. Neue Würfe std :: bad_alloc, wenn der Speicher nicht ausreicht - es gibt niemals null zurück, es sei denn, Sie verwenden das nicht-werfen-Formular. –