Ubuntu C++怎样使用智能指针
作者:RiverSoul
时间:2026-06-29
浏览:0
智能指针是C++11自动管理内存的特性,避免内存泄漏和野指针。Ubuntu需支持C++11,编译加`-std=c++11`,包含``。常用三类:`unique_ptr`独占所有权且轻量高效,`shared_ptr`引用计数自动释放适合多所有者,`weak_ptr`配合`shared_ptr`解决循环引用且不增加计数。合理使用可提升代码安全性。
C++里的智能指针,说白了就是一类专门替你管理动态内存的对象——你只管分配,它负责释放。这样一来,内存泄漏、野指针这些烦心事就能少一大半。在Ubuntu上要用好智能指针,关键在于把对应的头文件拉进来,然后用标准库里那几个现成的类就行。

常用的就那么三种,各有用武之地:
std::unique_ptr:独占所有权,一个资源只有一个主人。std::shared_ptr:共享所有权,多个人共同管理一份资源,引用计数归零时自动释放。std::weak_ptr:配合shared_ptr使用,专门解决循环引用的问题。
那在Ubuntu上具体怎么用呢?直接看代码。
首先,编译器得支持C++11或更高版本。用g++编译时加上-std=c++11(或者-std=c++17)就成:
g++ -std=c++11 -o my_program my_program.cpp
然后,在代码里这样写:
#include
#include // 智能指针的头文件
class MyClass {
public:
MyClass() { std::cout << "MyClass constructor called\n"; }
~MyClass() { std::cout << "MyClass destructor called\n"; }
void doSomething() { std::cout << "Doing something\n"; }
};
int main() {
// std::unique_ptr 示例
std::unique_ptr uniquePtr(new MyClass());
uniquePtr->doSomething();
// uniquePtr离开作用域时,MyClass实例自动释放
// std::shared_ptr 示例
std::shared_ptr sharedPtr1 = std::make_shared();
{
std::shared_ptr sharedPtr2 = sharedPtr1;
// sharedPtr1和sharedPtr2指向同一个实例
sharedPtr2->doSomething();
// sharedPtr2离开作用域,引用计数减1,但实例还在(sharedPtr1还活着)
}
sharedPtr1->doSomething();
// sharedPtr1离开作用域时,引用计数归零,实例自动释放
// std::weak_ptr 示例:避免了shared_ptr循环引用
std::weak_ptr weakPtr = sharedPtr1;
if (auto lockedPtr = weakPtr.lock()) { // 尝试提升为shared_ptr
lockedPtr->doSomething();
} else {
std::cout << "MyClass instance has been deleted\n";
}
// weakPtr不参与引用计数,所以不会影响实例的生命周期
return 0;
}
这段代码演示了三种智能指针的典型用法:unique_ptr确保资源唯一持有,shared_ptr通过引用计数实现共享,weak_ptr则作为观察者防止循环引用。只要记住一点:当智能指针离开作用域,它会自动搞定内存释放——这正是现代C++推荐的RAII思想。
作者最新文章
微软推出Project Zenith:面向Windows 11开发者的AI硬件加速方案
2026-09-08 18:15
打破流量垄断,让平台经济释放普惠红利
2026-09-08 18:07
Arm AGI CPU详解:136核Neoverse V3,3nm双芯粒架构与AI数据中心部署
2026-09-08 17:18
Windows安装Docker教程:启用WSL2并运行第一个容器验证
2026-09-04 09:26
PDF转Word操作指南:在线与本地转换方法及格式检查
2026-09-03 16:03
上一篇:
ulimit对磁盘I/O速度有限制吗
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































