这是我想用来了解析构函数的类。
#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之后的行之前调用。因此,这是否不意味着在循环内创建对象只是浪费时间,因为我们不能再使用它们了?还是它们可以以某种方式有用?
答案 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对象创建新的共享指针,以完成其他琐碎的计算/功能。