Próbuję iterować nad tymczasowym obiektem w zakresie pętli. Wygląda na to, że obiekt zostanie zniekształcony przed rozpoczęciem wykonywania pętli. Czy jest to zachowanie zgodne z normą? Używam gcc 4.8.std :: shared_ptr nie działa z zakresem dla
#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';
}
}
Wynik jest następujący:
Test::Test()
Test::~Test()
21770300
0
33
0
0
0
3
Lub po prostu przechowuj shared_ptr jako lokalny: http://ideone.com/U0eC8l –
Czy oprócz zwykłego wyboru posiadania instancji 'shared_ptr' w zasięgu lokalnym, czy są jakieś zalecane obejścia? – epl