C++智能指针

智能指针是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思想的典型应用。