小编col*_*ole的帖子

C++,匿名(未命名)变量的对象生命周期

在下面的代码中,“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++

4
推荐指数
1
解决办法
3451
查看次数

标签 统计

c++ ×1