Tôi đang cố gắng lặp qua đối tượng tạm thời trong một phạm vi cho vòng lặp. Dường như đối tượng được desctucted trước khi vòng lặp bắt đầu thực hiện. Đây có phải là hành vi tuân thủ tiêu chuẩn không? Tôi đang sử dụng gcc 4.8.std :: shared_ptr không hoạt động với phạm vi cho
#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';
}
}
Kết quả là như sau:
Test::Test()
Test::~Test()
21770300
0
33
0
0
0
3
Hoặc chỉ cần lưu shared_ptr làm địa phương: http://ideone.com/U0eC8l –
Khác với lựa chọn đơn giản để giữ dụ 'shared_ptr' trong phạm vi cục bộ, có cách giải quyết nào được đề nghị không? – epl