免費開始練習
高考申論題 105年 [資訊處理] 程式語言

第 三 題

📖 題組:
二、請觀察以下程式碼: 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; }
📝 此題為申論題,共 3 小題

小題 (三)

請說明此方法為解決何種問題?且程式概念為何?(10 分)

思路引導 VIP

看到自訂類別內部封裝指標,並在建構子賦值、解構子 delete,應立刻聯想到「智慧型指標 (Smart Pointer)」與「RAII」機制。答題時需切分兩部分:一是解決 C++ 手動管理記憶體易導致的 Memory Leak 問題;二是說明 RAII 與運算子多載的概念。

🤖
AI 詳解
AI 專屬家教

【破題】 此程式碼實作了基礎的「智慧型指標(Smart Pointer)」,旨在透過物件生命週期自動管理動態記憶體,核心概念為 RAII。 【論述】

小題 (一)

請問以下 C++程式碼輸出答案為何?(5 分)

思路引導 VIP

看到此題應立刻辨識出這是 C++ 中「智慧指標(Smart Pointer)」的簡易實作。解題關鍵在於追蹤動態記憶體的配置與生命週期,並理解多載解參考運算子 operator* 回傳參考(reference)的特性,使其能作為左值(L-value)被賦值與讀取。

🤖
AI 詳解
AI 專屬家教

【解題思路】分析 C++ 類別建構子、運算子多載(Operator Overloading)與動態記憶體配置的執行流程。 【詳解】

  1. 物件建構:Smart p(new int()); 執行時,配置了一塊存放整數的動態記憶體(預設初始化為 0),並將該指標傳入 Smart 的建構子,由私有成員指標 sp 接收並儲存。

小題 (二)

請問執行至 return 0 時,是否回收原分配給物件 p 之動態記憶體?(5 分)

思路引導 VIP

看到此題,應先辨識物件 p 是一個配置在堆疊(Stack)上的區域變數,而傳入的 new int() 則是配置在堆積(Heap)上的動態記憶體。接著聯想 C++ 的生命週期與 RAII 機制:當區域變數離開作用域時會發生什麼事(自動呼叫解構子),藉此推導出記憶體是否被釋放。

🤖
AI 詳解
AI 專屬家教

【解題關鍵】C++ 區域物件的生命週期與解構子(Destructor)的自動觸發機制。 【解析】 一、物件宣告與配置

🏷️ 相關主題

程式語言之記憶體管理與執行環境
查看更多「[資訊處理] 程式語言」的主題分類考古題

📝 同份考卷的其他題目

查看 105年[資訊處理] 程式語言 全題