6
我正在嘗試迭代循環範圍內的臨時對象。它看起來像對象在循環開始執行之前得到了desctucted。這是一種符合標準的行爲嗎?我正在使用gcc 4.8。std :: shared_ptr不適用於範圍
#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';
}
}
結果如下:
Test::Test()
Test::~Test()
21770300
0
33
0
0
0
3
或簡單地將shared_ptr作爲本地存儲:http://ideone.com/U0eC8l – 2013-04-26 22:50:09
除了在本地範圍內保存'shared_ptr'實例的簡單選擇之外,是否有任何推薦的解決方法? – epl 2017-01-18 23:52:33