在下面的代码中,“main()”最后一行构造的对象似乎在表达式结束之前被销毁。析构函数在执行“<<”之前调用。这是应该的样子吗?
#include <string>
#include <sstream>
#include <iostream>
using std::string;
using std::ostringstream;
using std::cout;
class A : public ostringstream
{
public:
A () {}
virtual ~A ()
{
string s;
s = str();
cout << "from A: " << s << std::endl;
}
};
int
main ()
{
string s = "Hello";
A os;
os << s;
cout << os.str() << std::endl;
A() << "checking this";
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
Hello
from A: 0x80495f7
from A: Hello
Run Code Online (Sandbox Code Playgroud)
这是 gdb 日志:
(gdb) b os.cxx …Run Code Online (Sandbox Code Playgroud) c++ ×1