传统指针的问题

传统指针可能会导致内存泄漏、重复释放和一场安全问题,进而导致程序奔溃:

#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;
}

标签: 传统指针, 内存泄漏, 重复释放

添加新评论