在方法中的if语句内创建的对象的生命周期和有用性

时间:2018-11-16 19:48:24

标签: c++ object destructor lifetime

这是我想用来了解析构函数的类。

#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之后的行之前调用。因此,这是否不意味着在循环内创建对象只是浪费时间,因为我们不能再使用它们了?还是它们可以以某种方式有用?

1 个答案:

答案 0 :(得分:0)

当您询问有用性时,我不确定您的意思。

如果您只需要一个对象在很短的时间内存在,但仍想保留该数据,则可以使用 std :: shared_ptr 使用智能指针动态分配内存用于堆上的对象。对象访问非常迅速,并且是简单使用它们的简便方法。您可以使用原始指针来做到这一点,但是智能指针更安全,因为您永远不会因为忘记删除原始指针而导致内存泄漏:

std::shared_ptr<Student> stu_ptr;

if (a == 5) 
    stu_ptr = (new (Student(a)));

stu_ptr->someClassFunction();

stu_ptr在if语句之后仍然存在。如果您想执行多个检查/条件,则可以继续分配该stu_ptr,或者由于共享指针的性质,您可以为同一Student对象创建新的共享指针,以完成其他琐碎的计算/功能。