在C++程序設計過程中,內存泄漏和野生指針是內存中最常見的錯誤,這兩個問題實際上是由對象的生命周期管理不當造成的,今天為你詳細解析C++臨時性對象的生命周期,一起跟著武林技術頻道小編來看看吧!
有關臨時對象的生命周期有三種情況:
1)一般情況:臨時性對象的被摧毀,應該是對完整表達式(full-expression)求值過程中的最后一個步驟。該完整表達式造成臨時對象的產生。
實例代碼如下:
?
?
運行結果為:
?
?
?
?
?
2)凡含有表達式執行結果的臨時性對象,應該存留到object的初始化操作完成為止。
示例代碼如下:
?
?
class A
{
public:
??? A(int i = 0): m_i(i)
??? {
??????? cout << "A(): " << m_i << endl;
??? }
??? ~A()
??? {
??????? cout << "~A(): " << m_i << endl;
??? }
??? A operator+(const A& rhs)
??? {
??????? cout << "A operator+(const A& rhs)" << endl;
??????? return A(m_i + rhs.m_i);
??? }
??? A& operator=(const A& rhs)
??? {
??????? cout << "A& operator=(const A& rhs)" << endl;
??????? m_i += rhs.m_i;
??????? return *this;
??? }
??? int m_i;
};
int main()
{
??? A a1(1), a2(2);
??? A a3;
??? a3 = a1 + a2; //a1 + a2產生的臨時變量在a3的賦值操作完成后,才釋放
??? return 0;
}
運行結果為:
?
?
3)如果一個臨時性對象被綁定于一個reference,對象將殘留,直到被初始化之reference的生命結束,或直到臨時對象的生命范疇(scope)結束——視哪一種情況先到達而定。
示例代碼如下:
?
?
?
運行結果:
準確來說,生命周期其實也是很實用的,今天武林技術頻道小編詳細解析C++臨時性對象的生命周期,希望對你有幫助,也希望大家繼續支持武林技術頻道!
新聞熱點
疑難解答
圖片精選