C++ 中的变量分配是如何工作的?
How does variable allocation works in C++?
我在main.cpp
正文中有这个(怎么称呼?全局?)
ofstream s;
...
int main ... {
s = ofstream("somefile.txt");
...
然后另一个线程每天使用一次滚动:
s.close();
// do I need to cleanup in between?
s = ofstream("anotherone.txt");
我需要在 creating
新流之前进行清理吗?
close()
是在classofstream
中定义的成员函数。它不是析构函数;从根本上讲,它对 C++ 语言的规则来说并不特别。就此而言,s = ofstream("anotherone.txt")
实际上只是拼写代码行 s.assignment_operator(ofstream("anotherone.txt"))
的另一种方式,只是拼写为 operator=
而不是 assignment_operator
。 (请注意,在这种情况下,传递给成员函数的值是一个临时值,并在函数 returns 之后被销毁。这并不一定意味着打开和关闭文件时会发生什么;这就是语言的工作方式。)
一个全局变量贯穿程序的整个生命周期;启动和关闭期间的精确语义有点棘手,但肯定在“主要阶段”期间它们始终存在。当调用 s.close()
时,ofstream
的设计可能会将 s
置于不同的状态,但这完全取决于 ofstream
的设计,并且是你d 通过阅读 class 的文档而不是通过阅读语言规则来发现。
我在main.cpp
正文中有这个(怎么称呼?全局?)
ofstream s;
...
int main ... {
s = ofstream("somefile.txt");
...
然后另一个线程每天使用一次滚动:
s.close();
// do I need to cleanup in between?
s = ofstream("anotherone.txt");
我需要在 creating
新流之前进行清理吗?
close()
是在classofstream
中定义的成员函数。它不是析构函数;从根本上讲,它对 C++ 语言的规则来说并不特别。就此而言,s = ofstream("anotherone.txt")
实际上只是拼写代码行 s.assignment_operator(ofstream("anotherone.txt"))
的另一种方式,只是拼写为 operator=
而不是 assignment_operator
。 (请注意,在这种情况下,传递给成员函数的值是一个临时值,并在函数 returns 之后被销毁。这并不一定意味着打开和关闭文件时会发生什么;这就是语言的工作方式。)
一个全局变量贯穿程序的整个生命周期;启动和关闭期间的精确语义有点棘手,但肯定在“主要阶段”期间它们始终存在。当调用 s.close()
时,ofstream
的设计可能会将 s
置于不同的状态,但这完全取决于 ofstream
的设计,并且是你d 通过阅读 class 的文档而不是通过阅读语言规则来发现。