c++智能指针使用实例
时间: 2024-11-21 15:30:33 浏览: 5
C++中智能指针如何设计和使用
C++的智能指针通常用于管理动态分配的资源,这里我会举两个常用的智能指针的例子,分别是 `std::unique_ptr` 和 `std::shared_ptr`:
1. **std::unique_ptr** 示例:
```cpp
#include <memory>
class MyClass {
public:
void sayHello() { std::cout << "Hello from MyClass!\n"; }
};
int main() {
// 使用 unique_ptr 管理对象
std::unique_ptr<MyClass> myObj(new MyClass());
// 调用成员函数
myObj->sayHello();
// 当 unique_ptr 赋值给另一个指针时,旧的对象会被自动删除
std::unique_ptr<MyClass> anotherObj = std::move(myObj); // myObj 将不再有有效内容
return 0;
}
```
在这个例子中,`myObj` 在主函数结束后会自动删除`MyClass`对象,因为它的生命周期结束。
2. **std::shared_ptr** 示例:
```cpp
#include <memory>
class MyClass {
public:
void sayHello() { std::cout << "Hello from MyClass!\n"; }
};
int main() {
// shared_ptr 分享所有权,多个指针可以同时持有
std::shared_ptr<MyClass> sharedObj(new MyClass());
// 创建另一个 shared_ptr 并连接到相同的对象
std::shared_ptr<MyClass> anotherSharedObj = sharedObj;
// 共享的资源不会被立即删除,直到最后一个引用消失
sharedObj.reset(); // 第一个对象不再指向,但第二个仍存在
// anotherSharedObj 引用的对象依然存在,直到它也被重置
return 0;
}
```
在这个示例中,即使 `sharedObj` 被重置,`anotherSharedObj` 仍然存在,`MyClass` 对象只有在没有任何其他引用时才会被销毁。
阅读全文