繁体   English   中英

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

[英]Lifetime and usefulness of an object that is created inside an if statement in a method

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

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

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

如果您只需要一个对象在很短的时间内存在,但仍想保留该数据,则可以使用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对象创建新的共享指针,以完成其他琐碎的计算/功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM