1
は考えてみましょう:C++ 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.top();
S.pop();
obj.display();
return 0;
}
から:http://www.cplusplus.com/reference/stack/stack/pop/、 "これは削除要素のデストラクタを呼び出します"。 また、http://www.cplusplus.com/reference/stack/stack/top/から、stack.top()は参照によって戻されます。
S.top()
が参照によって返され、S.pop()
がオブジェクトを破壊した場合、なぜobj.display()
に失敗しますか?
スタックは、基本コンテナのback()
とpop_back()
のメソッドを呼び出すことがわかりました。拡張によって、なぜそれは失敗しないのですか?
のように、定義されません。要素は破壊された後で参照され使用されるので、それは基本的な動作ではありません – StoryTeller