#include <iostream>
#include <memory>
// 智能指针示例代码
int main() {
// 使用 std::unique_ptr 管理单个对象的生命周期
{
std::unique_ptr<int> uniquePtr = std::make_unique<int>(10);
std::cout << "Value managed by unique_ptr: " << *uniquePtr << std::endl;
} // uniquePtr 在这里被销毁,内存自动释放
// 使用 std::shared_ptr 管理多个所有者共享的对象
{
std::shared_ptr<int> sharedPtr1 = std::make_shared<int>(20);
std::shared_ptr<int> sharedPtr2 = sharedPtr1; // 共享同一个对象
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;
if (std::shared_ptr<int> lockedPtr = weakPtr.lock()) { // 检查弱指针是否仍然有效
std::cout << "Value managed by weak_ptr: " << *lockedPtr << std::endl;
} else {
std::cout << "Weak pointer has expired." << std::endl;
}
}
return 0;
}
std::unique_ptr
:独占所有权的智能指针,不能复制,只能移动。当 unique_ptr
超出作用域时,它会自动释放所管理的对象。std::shared_ptr
:允许多个指针共享同一个对象。每个 shared_ptr
都会维护一个引用计数器,当最后一个 shared_ptr
被销毁或重置时,对象才会被释放。std::weak_ptr
:不增加引用计数,用于打破 shared_ptr
之间的循环引用问题。weak_ptr
不能直接访问对象,需要通过 lock()
方法转换为 shared_ptr
才能使用。这些智能指针可以帮助你更安全地管理动态分配的内存,避免内存泄漏和悬空指针等问题。
上一篇:c++语言基础知识入门
下一篇:c++map
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站