簡體   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