1

我是 C++ 新手,遇到了所谓的 错误,但不知何故我的程序可以正常工作.. 这是代码

#include<iostream>
#include<queue>
#include <string>


int main()
{
 string s ("cat");
 queue<string> _queue;
 _queue.push(s);
 string & s1 = _queue.front();
 _queue.pop();
 // at this time s1 should become invalid as pop called destructor on s
 std::cout << s1 << std::endl;
 return 0;

 }

即使 s1 是对无效对象的引用,它也可以正常工作。有没有办法我可以断言 s1 真的指的是一个无效的对象?

4

1 回答 1

5

尝试以您在代码中的方式访问被破坏的对象会导致未定义的行为。不,没有语言提供的方法可以针对这种情况执行运行时检查。确保此类事情不会在您的代码中发生完全是您的责任。

在您的实验中“它只是有效”的事实只是一个意外(与往常一样,具有一定程度的典型计算机确定性)。您的程序中可能会发生一些完全不相关的事情,并且此代码将不再“工作”。

于 2012-10-05T22:12:42.250 回答