Avatar ·

什么是智能指针(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`。什么时候该选择哪一个?有没有什么陷阱?希望能有代码示例和适合新手的说明。 <<>>

什么是智能指针?

智能指