发布于2026-06-29 阅读(0)
扫一扫,手机访问
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思想。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8