C++11中的智能指针怎么用

发布时间:2021-08-26 14:19:47 作者:chen
来源:亿速云 阅读:135

C++11中的智能指针怎么用

在C++11标准中,引入了智能指针的概念,以帮助开发者更安全、更方便地管理动态内存。智能指针是一种类模板,它能够自动管理所指向对象的生命周期,从而避免内存泄漏和悬空指针等问题。C++11中主要提供了三种智能指针:std::unique_ptrstd::shared_ptrstd::weak_ptr

1. std::unique_ptr

std::unique_ptr是一种独占所有权的智能指针,它确保同一时间内只有一个unique_ptr实例可以拥有某个对象。当unique_ptr被销毁时,它所管理的对象也会被自动删除。

使用示例

#include <memory>
#include <iostream>

class MyClass {
public:
    MyClass() { std::cout << "MyClass constructed\n"; }
    ~MyClass() { std::cout << "MyClass destroyed\n"; }
    void doSomething() { std::cout << "Doing something\n"; }
};

int main() {
    std::unique_ptr<MyClass> ptr(new MyClass());
    ptr->doSomething();
    // 不需要手动删除,ptr离开作用域时会自动销毁
    return 0;
}

特点

2. std::shared_ptr

std::shared_ptr是一种共享所有权的智能指针,它允许多个shared_ptr实例共享同一个对象的所有权。当最后一个shared_ptr被销毁时,所管理的对象才会被删除。

使用示例

#include <memory>
#include <iostream>

class MyClass {
public:
    MyClass() { std::cout << "MyClass constructed\n"; }
    ~MyClass() { std::cout << "MyClass destroyed\n"; }
    void doSomething() { std::cout << "Doing something\n"; }
};

int main() {
    std::shared_ptr<MyClass> ptr1(new MyClass());
    std::shared_ptr<MyClass> ptr2 = ptr1; // 共享所有权
    ptr1->doSomething();
    ptr2->doSomething();
    // 当ptr1和ptr2都离开作用域时,MyClass对象才会被销毁
    return 0;
}

特点

3. std::weak_ptr

std::weak_ptr是一种弱引用的智能指针,它不增加所管理对象的引用计数。weak_ptr通常与shared_ptr一起使用,用于解决循环引用问题。

使用示例

#include <memory>
#include <iostream>

class MyClass {
public:
    std::shared_ptr<MyClass> other;
    MyClass() { std::cout << "MyClass constructed\n"; }
    ~MyClass() { std::cout << "MyClass destroyed\n"; }
    void doSomething() { std::cout << "Doing something\n"; }
};

int main() {
    std::shared_ptr<MyClass> ptr1(new MyClass());
    std::shared_ptr<MyClass> ptr2(new MyClass());
    ptr1->other = ptr2;
    ptr2->other = ptr1; // 循环引用

    std::weak_ptr<MyClass> weakPtr = ptr1;
    if (auto sharedPtr = weakPtr.lock()) {
        sharedPtr->doSomething();
    }
    // 当ptr1和ptr2离开作用域时,MyClass对象会被销毁
    return 0;
}

特点

总结

C++11中的智能指针为内存管理提供了强大的工具,能够有效避免内存泄漏和悬空指针等问题。std::unique_ptr适用于独占所有权的场景,std::shared_ptr适用于共享所有权的场景,而std::weak_ptr则用于解决循环引用问题。合理使用这些智能指针,可以大大提高代码的安全性和可维护性。

推荐阅读:
  1. C++11智能指针和引用
  2. c++智能指针怎么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++

上一篇:iOS11如何实现拖拽交互

下一篇:Android触摸事件和mousedown、mouseup、click事件之间有什么关系

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》