C++ 智能指针:使用场景、实现原理与内存泄漏防治
一、智能指针的使用场景分析
C++ 以其高效著称,手动内存管理(new/delete)避免了高级语言垃圾回收的开销,但这把双刃剑对程序员要求极高。手动管理极易出现内存泄漏,特别是在异常处理场景中。
例如,在函数中连续分配资源时,若中间发生异常,后续的 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; // 异常重新抛出
}
delete[] array1;
delete[] array2;
}
int main() {
{
();
} ( * errmsg) { cout << errmsg << endl; }
( exception& e) { cout << e.() << endl; }
(...) { cout << << endl; }
;
}


