Avatar ·

什么是智能指针(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` 之间有什么区别?现在是否还需要使用普通指针?以及如何正确...