当前位置:首页 C++ > 正文

C++智能指针实例详解

作者:野牛程序员:2024-01-22 17:49:40 C++阅读 2769

智能指针是C++中用于管理动态分配的内存的工具,有助于避免内存泄漏和提高代码的安全性。以下是C++中两种常用的智能指针类型的简要示例:std::shared_ptrstd::unique_ptr

std::shared_ptr 示例:

#include <iostream>
#include <memory>

class MyClass {
public:
    MyClass(int val) : value(val) {
        std::cout << "构造函数,数值: " << value << std::endl;
    }

    ~MyClass() {
        std::cout << "析构函数,数值: " << value << std::endl;
    }

    void display() {
        std::cout << "数值: " << value << std::endl;
    }

private:
    int value;
};

int main() {
    // 创建 shared_ptr,自动管理内存
    std::shared_ptr<MyClass> sharedPtr = std::make_shared<MyClass>(42);

    // 多个 shared_ptr 共享同一块内存
    std::shared_ptr<MyClass> sharedPtr2 = sharedPtr;

    // 使用 shared_ptr
    sharedPtr->display();
    sharedPtr2->display();

    // shared_ptr 在不再需要时自动释放内存

    return 0;
}

std::unique_ptr 示例:

#include <iostream>
#include <memory>

class MyUniqueClass {
public:
    MyUniqueClass(int val) : value(val) {
        std::cout << "构造函数,数值: " << value << std::endl;
    }

    ~MyUniqueClass() {
        std::cout << "析构函数,数值: " << value << std::endl;
    }

    void display() {
        std::cout << "数值: " << value << std::endl;
    }

private:
    int value;
};

int main() {
    // 创建 unique_ptr,独占所有权
    std::unique_ptr<MyUniqueClass> uniquePtr = std::make_unique<MyUniqueClass>(73);

    // 使用 unique_ptr
    uniquePtr->display();

    // unique_ptr 不允许复制所有权,以下行将导致编译错误
    // std::unique_ptr<MyUniqueClass> uniquePtr2 = uniquePtr; 

    // 在离开作用域时,unique_ptr 自动释放内存

    return 0;
}

这两个示例分别演示了 std::shared_ptrstd::unique_ptr 的基本用法。根据需求,选择适合场景的智能指针类型。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击