#include <iostream>
#include <memory>
// 智能指针示例代码
int main() {
// 使用 std::unique_ptr 管理动态分配的对象
{
std::unique_ptr<int> uniquePtr(new int(10)); // 创建一个 unique_ptr,管理一个 int 类型的动态对象
std::cout << "Value managed by unique_ptr: " << *uniquePtr << std::endl;
} // uniquePtr 在这里超出作用域,自动释放所管理的对象
// 使用 std::shared_ptr 共享对象的所有权
{
std::shared_ptr<int> sharedPtr1 = std::make_shared<int>(20); // 创建一个 shared_ptr,管理一个 int 类型的动态对象
std::shared_ptr<int> sharedPtr2 = sharedPtr1; // 复制 shared_ptr,共享所有权
std::cout << "Value managed by shared_ptr: " << *sharedPtr1 << std::endl;
std::cout << "Reference count: " << sharedPtr1.use_count() << std::endl; // 输出引用计数
} // sharedPtr1 和 sharedPtr2 超出作用域,自动释放所管理的对象
// 使用 std::weak_ptr 避免循环引用
{
std::shared_ptr<int> sharedPtr = std::make_shared<int>(30);
std::weak_ptr<int> weakPtr = sharedPtr; // 创建一个 weak_ptr,不增加引用计数
if (std::shared_ptr<int> tempPtr = weakPtr.lock()) { // 检查 weak_ptr 是否仍然有效
std::cout << "Value managed by weak_ptr: " << *tempPtr << std::endl;
}
}
return 0;
}
std::unique_ptr
:独占所有权的智能指针。它确保同一时间只有一个 unique_ptr
可以管理某个对象。当 unique_ptr
超出作用域时,会自动释放其所管理的对象。
std::shared_ptr
:共享所有权的智能指针。多个 shared_ptr
可以同时管理同一个对象,并通过引用计数来决定何时释放对象。当最后一个 shared_ptr
被销毁或重置时,对象才会被释放。
std::weak_ptr
:弱引用智能指针。它不会增加引用计数,通常用于避免循环引用问题。通过 lock()
方法可以尝试获取一个有效的 shared_ptr
,如果对象已经被释放,则返回空指针。
以上代码展示了如何使用 C++ 中的三种主要智能指针类型来管理动态分配的对象。
上一篇:bits/stdc++.h
下一篇:c++ auto
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站