什么是智能指针(smart pointer)以及何时应该使用它?
大家好!我最近开始学习C++,在处理内存时总是遇到问题。尤其让我害怕的是内存泄漏和悬空指针。例如,我经常写这样的代码:
```cpp
class MyClass {
public:
int* data;
MyClass() {
data = new int(42);
}
~MyClass() {
delete data;
}
};
void example() {
MyClass* obj = new MyClass();
// ... 一些可能抛出异常的代码
delete obj;
}
```
问题在于,如果在 `new` 和 `delete` 之间发生异常,或者我忘记调用 `delete`,内存就会泄漏。而如果有人提前删除了对象,但我继续使用它,程序就会崩溃。
我听说C++11引入了“智能指针”(smart pointers),应该能解决这些问题。但我完全不明白它们是如何工作的,以及何时使用它们。`unique_ptr`、`shared_ptr` 和 `weak_ptr` 之间有什么区别?现在是否还需要使用普通指针?以及如何正确...