C++ C++;STL堆栈:何时可以安全地弹出()
考虑:C++ C++;STL堆栈:何时可以安全地弹出(),c++,c++11,stl,C++,C++11,Stl,考虑: #include <iostream> #include <stack> class Abc { int x = 5; public: void display() { std::cout << x << std::endl; } }; int main() { std::stack<Abc> S; S.emplace(); auto obj = S.
#include <iostream>
#include <stack>
class Abc {
int x = 5;
public:
void display() {
std::cout << x << std::endl;
}
};
int main() {
std::stack<Abc> S;
S.emplace();
auto obj = S.top();
S.pop();
obj.display();
return 0;
}
#包括
#包括
Abc班{
int x=5;
公众:
无效显示(){
std::coutauto obj=S.top();
copy从S.top()
初始化obj
。它是随后删除的元素的副本
您的代码片段具有定义良好的行为
如果要获取引用,例如auto&obj=S.top();
auto-obj=S.top();
copy从S.top()
初始化obj
。它是随后删除的元素的副本
您的代码片段具有定义良好的行为
如果您要获取引用,例如auto&obj=S.top()
@j4nu5,正如我最后一句话所说。它将是未定义的行为,因为元素在被引用后被引用和使用destroyed@j4nu5,正如我最后一句话所说,这将是未定义的行为,因为元素在被销毁后被引用和使用