一、智能指针的使用场景分析
C++ 作为公认的高效编程语言,其手动内存管理(new/delete)避免了高级语言(如 Java、Python)自动垃圾回收带来的额外开销。但这把双刃剑对程序员提出了更高要求,手动管理极易引发内存泄漏。
在某些复杂场景中,异常处理会导致资源释放逻辑遗漏。例如,在函数中连续分配内存后执行可能抛出异常的除法操作,若第二个 new 抛出异常,第一个分配的内存将因后续 delete 未执行而泄漏。虽然可以通过嵌套 try-catch 块来捕获并释放,但这会让代码极其臃肿且难以维护。智能指针引入后,这类问题迎刃而解。
double divide(int a, int b) {
if (b == 0) throw "Divide by zero condition!";
else return (double)a / (double)b;
}
void func() {
// 如果发生除 0 错误抛出异常,下面的 array1 和 array2 没有得到释放
int* array1 = new int[10];
int* array2 = new int[10];
try {
int len, time; cin >> len >> time;
cout << divide(len, time) << endl;
} catch (...) {
cout << "delete []" << array1 << endl;
cout << "delete []" << array2 << endl;
delete[] array1;
delete[] array2;
throw; // 异常重新抛出
}
cout << "delete []" << array1 << endl;
delete[] array1;
cout << "delete []" << array2 << endl;
delete[] array2;
}
{
{
();
} ( * errmsg) { cout << errmsg << endl; }
( exception& e) { cout << e.() << endl; }
(...) { cout << << endl; }
;
}


