什么是智能指针(smart pointers)以及何时需要使用它们?
大家好!我写C++时间不长,但已经遇到了内存泄漏的问题。我目前还在使用普通的原始指针(raw pointers)配合`new`和`delete`,但总是忘记调用`delete`,尤其是当代码中加入了异常处理和提前返回时。例如:
```cpp
void process() {
Resource* res = new Resource();
// ... 一些可能抛出异常的代码 ...
delete res; // 如果发生异常,这里就不会执行——内存泄漏!
}
```
我听说过C++11中的“智能指针”(smart pointers),但不太理解它们到底是什么。网上有很多信息,但我想要一个清晰的解释:它们是什么,与普通指针有何不同,以及在哪些情况下真正应该使用它们?我特别感兴趣的是`std::unique_ptr`、`std::shared_ptr`和`std::weak_ptr`。什么时候该选择哪一个?有没有什么陷阱?希望能有代码示例和适合新手的说明。
<<>>
什么是智能指针?
智能指