【C++】智能指针详解-二、为什么要用智能指针

像前面抛异常的捕获try、catch就非常容易造成内存泄漏。

#include <iostream>
#include <stdexcept>

void causeMemoryLeak() {
    int* ptr = new int(42); // 动态分配内存

    // 模拟抛出异常
    throw std::runtime_error("Something went wrong!");

    // 此处如果异常未抛出,应该释放内存
    delete ptr;
}

int main() {
    try {
        causeMemoryLeak();
    } catch (const std::exception& e) {
        std::cout << "Caught exception: " << e.what() << std::endl;
        // 这里 ptr 的内存没有被释放,造成内存泄漏
    }

    return 0;
}

前面的C++异常中聊过,当throw执行时,throw后面的语句将不再被执行。所以当这里抛出runtime_error异常后,导致delete per被跳过。造成了内存泄漏。虽然我们可以通过对代码进行优化,以防止出现这种情况。但是如果用智能指针来对资源进行管理就会非常的方便。
C++98提供了std::auto_ptr
C++11提供了std::unique_ptrstd::shared_ptrstd::weak_ptr

上一篇:ORB特征提取法


下一篇:PostgreSQL 并发更新冲突与解决方案