C++ programming language resource management implementation
C++程式語言資源管理實作
、請觀察以下程式碼:
請問以下 C++程式碼輸出答案為何?(5 分)
請問執行至 return 0 時,是否回收原分配給物件 p 之動態記憶體?(5 分)
請說明此方法為解決何種問題?且程式概念為何?(10 分)
class Smart{
public:
explicit Smart(int *p = NULL) { sp = p; }
~Smart() { delete(sp); }
int& operator*() { return *sp; }
private:
int *sp;
};
int main(void){
Smart p(new int());
*p = 2016;
cout << *p << endl;
return 0;
}
以下是對提出的問題的回答:
1. 這段 C++ 程式碼將建立一個 `Smart` 物件 `p`,並動態分配一個整數的記憶體空間,將其設定為 2016,然後印出 2016。
2. 這個程式在 `Smart` 類別的析構子中有釋放分配給 `p` 的動態記憶體 (`sp`) 的程式碼,所以當 `p` 物件超出其作用範圍(在 `main` 函式結束時),會釋放這段動態分配的記憶體,這是由 `delete(sp)` 完成的。因此,這段程式會在程式結束時回收原本分配給 `p` 的動態記憶體。
3. 這個程式是為了解決資源管理的問題,特別是針對動態記憶體的分配。`Smart` 類別使用 RAII(Resource Acquisition Is Initialization)的概念,它確保當物件離開其作用範圍時,資源(這裡是動態分配的記憶體)會被正確釋放,以避免記憶體洩漏。這種方式在 C++ 中常被用於管理資源,如動態記憶體、檔案資源等。
Comments
Post a Comment