传递给构造函数的临时对象的C++生命周期
C++ lifespan of temporary object passed to constructor
我有一个类,它在构造函数中接受istream引用。如果构造函数被传递给一个临时对象,例如myclass obj(ifstream("filename"));
ifstream 对 obj
的生命周期有好处吗?它是否取决于它是否分配给类中的引用或指针?
例如:
class test
{
public:
istream *p;
test(istream &is)
{
p = &is;
cout << "a constructor" << endl;
}
~test()
{
cout << "a destructor" << endl;
}
bool isgood()
{
return p->good();
}
};
int main()
{
test test(ifstream("test.cpp"));
cout << test.isgood() << endl;
}
输出:
a constructor
1
a destructor
仅仅因为输出说文件很好,我不知道它是否已被销毁还是什么。如果标准中有一部分涵盖此内容,请告诉我。谢谢
抱歉,我没有足够的声誉来评论。
临时istream
仅在构造函数中有效。即使使用istream
的地址来设置指针的值,一旦构造函数返回,也不能再使用它。由于在构造函数调用之后,临时 ifstream 已经被关闭并销毁。因此,指针将指向@Josh提到的垃圾。您可以修改代码以将文件名传递到构造函数中,并使用文件名初始化成员ifstream
(而不是指向 ifstream 的指针)。然后,您可以在对象的生命周期内使用该流。
相关文章:
- 如何在共享库的整个生命周期内存储数据
- 如何理解句子的生命周期始于对e的评估
- 它解决了什么问题,对于非真空初始化,生命周期在初始化之前就开始了
- Go/C++gRPC客户端通道和存根生命周期
- 如何将"this"的生命周期移动到C++中的另一个对象中?
- 是否可以通过使用移动/交换 c++11 来延长返回的临时变量的生命周期
- 我在视觉工作室中制作了一个类似胭脂的游戏,我想显示玩家的生命值
- 康威的生命游戏帮助我理解这个意想不到的输出
- 使用对象的生命周期作为设置器的安全性
- 临时人员的生命周期传递给函数
- 我想知道在构造函数中初始化变量时的生命周期
- 康威的生命游戏C++代码检查
- Lua 用户数据生命周期管理
- 此常量引用是否保留了其生命?
- STD :: async的论点的生命是什么
- 如何使用 epoll(void* event.data.ptr) 管理 Connection 的生命周期
- C++引用的生命周期
- 我无法将'2D array whit bool'转换为"空 2D 数组布尔值"(用于生命游戏)
- 在堆栈上有一个对象,而不是在函数的整个生命周期内
- 在 Boost ASIO 服务器中处理生命周期