【发布时间】:2019-04-20 00:44:22
【问题描述】:
这是我想用来理解析构函数的类。
#include iostream
using namespace std;
class Student{
public:
Student(int num = 0)
{
id = num;
}
}
这是方法
void bar(int a)
{
if( a == 5)
Student S(5);
cout<<"after if"<<endl;
}
问题是如果 a = 5; Student 类的对象 S 被创建,对象的生命周期以 if 循环结束。析构函数在 if 之后的行之前调用。那么这不应该意味着在循环中创建对象只是浪费时间,因为我们不能再使用它们了吗?或者它们能以某种方式有用吗?
【问题讨论】:
-
你可以在循环中使用它们,非常有用。
-
如果您有一个循环,而不仅仅是一个
if语句,这是确保在每次迭代开始时将变量重置为已知状态的好方法。 -
"那么这不应该意味着在循环中创建对象只是浪费时间,因为我们不能再使用它们了吗?" 1)你的例子没有甚至包含一个循环。 2)在你的例子中,是的,它没用。然而,在某些情况下,创建一个生命周期限制在特定范围内的对象会很有用(更不用说某些对象有目的的情况,只是在某个内部范围内时,我想到的示例之一是:
std::scoped_lock)。 -
如果您曾经编写过任何算法,那么您很可能使用过仅存在于循环中的原语。他们没用吗?堆栈上的任何东西都是无用的,因为它在主要结束时(或之前)就死了?
标签: c++ object destructor lifetime