c++传统指针的问题
传统指针的问题
传统指针可能会导致内存泄漏、重复释放和一场安全问题,进而导致程序奔溃:
#include <iostream>
using namespace std;
class Resource {
private:
string name;
public:
Resource(const string& n) : name(n) {
cout << "创建资源: " << name << endl;
}
~Resource() {
cout << "销毁资源: " << name << endl;
}
void use() {
cout << "使用资源: " << name << endl;
}
};
void demonstrateProblems() {
// 问题1:忘记删除
Resource* res1 = new Resource("数据库连接");
res1->use();
// 忘记 delete res1; 导致内存泄漏
// 问题2:重复删除
Resource* res2 = new Resource("文件句柄");
Resource* res3 = res2;
delete res2;
// delete res3; // 错误:重复删除
// 问题3:异常安全
Resource* res4 = new Resource("网络连接");
try {
if (rand() % 2 == 0) {
throw runtime_error("操作失败");
}
res4->use();
delete res4;
} catch (...) {
// 异常发生时,资源可能未释放
cout << "异常发生,资源可能泄漏" << endl;
}
}
int main() {
demonstrateProblems();
return 0;
}
