智能指针是C++中用于自动内存管理的类,可以防止手动使用指针带来的问题。
一、智能指针基本概念
智能指针通过重载运算符实现与普通指针类似的语法,进行堆内存的自动申请与释放。
C++11中常用的智能指针有std::shared_ptr、std::unique_ptr等。
二、std::shared_ptr
std::shared_ptr实现共享式拥有权的智能指针,多个shared_ptr可以指向同一个对象,通过引用计数实现自动释放内存:
shared_ptr<int> p1(new int(10));
shared_ptr<int> p2 = p1; // 引用计数加一
p1.reset(); // 减少一个引用计数
三、std::unique_ptr
std::unique_ptr实现独占式拥有权的智能指针,每个对象只能被一个unique_ptr独占指向:
unique_ptr<int> p(new int(10));
四、std::weak_ptr
std::weak_ptr作为std::shared_ptr的配套,用于解决shared_ptr循环引用问题。
五、与原始指针区别
智能指针自动析构可以防止内存泄漏。
六、使用注意事项
正确使用std::move指定所有权转移,避免不必要拷贝开销。
掌握智能指针的用法对C++现代编程极为重要,可以减少隐晦的BUG。它是RAII思想的典型应用。