Sto tentando di eseguire l'iterazione su un oggetto temporaneo in un intervallo per ciclo. Sembra che l'oggetto venga descritto prima che il ciclo inizi l'esecuzione. È un comportamento conforme allo standard? Sto usando gcc 4.8.std :: shared_ptr non funziona con intervallo per
#include <iostream>
#include <vector>
#include <memory>
struct Test: std::vector<int> {
Test(): std::vector<int>{1,2,3} {
std::cout << __PRETTY_FUNCTION__ << '\n';
}
~Test() {
std::cout << __PRETTY_FUNCTION__ << '\n';
}
};
std::shared_ptr<Test> func() {
return std::shared_ptr<Test>(new Test);
}
int main() {
for (const auto &obj: *func()) {
std::cout << obj << '\n';
}
}
Il risultato è il seguente:
Test::Test()
Test::~Test()
21770300
0
33
0
0
0
3
O semplicemente memorizzare shared_ptr come locale: http://ideone.com/U0eC8l –
Oltre alla semplice scelta di mantenere l'istanza 'shared_ptr' in ambito locale, ci sono soluzioni alternative consigliate? – epl