MST

星途 面试题库

面试题:C++中std::shared_ptr引用计数的基本操作

请描述在C++中,使用std::shared_ptr创建一个指向整数对象的指针,并通过代码展示引用计数是如何在对象创建、赋值和销毁时发生变化的。
46.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>
#include <memory>

int main() {
    // 创建一个指向整数对象的 std::shared_ptr
    std::shared_ptr<int> ptr1 = std::make_shared<int>(42);

    // 输出初始引用计数
    std::cout << "ptr1 引用计数: " << ptr1.use_count() << std::endl;

    // 创建另一个指向相同对象的 std::shared_ptr
    std::shared_ptr<int> ptr2 = ptr1;

    // 输出赋值后的引用计数
    std::cout << "ptr1 引用计数: " << ptr1.use_count() << std::endl;
    std::cout << "ptr2 引用计数: " << ptr2.use_count() << std::endl;

    // 重置 ptr1,使其不再指向该对象
    ptr1.reset();

    // 输出重置后的引用计数
    std::cout << "ptr1 引用计数: " << ptr1.use_count() << std::endl;
    std::cout << "ptr2 引用计数: " << ptr2.use_count() << std::endl;

    // 重置 ptr2,对象将被销毁
    ptr2.reset();

    // 输出最终的引用计数
    std::cout << "ptr1 引用计数: " << ptr1.use_count() << std::endl;
    std::cout << "ptr2 引用计数: " << ptr2.use_count() << std::endl;

    return 0;
}
  1. 对象创建:使用std::make_shared<int>(42)创建了一个指向整数对象42std::shared_ptr<int>,此时引用计数为1。
  2. 赋值std::shared_ptr<int> ptr2 = ptr1;语句将ptr1赋值给ptr2,它们现在指向同一个对象,引用计数增加到2。
  3. 销毁
    • ptr1.reset();使ptr1不再指向对象,引用计数减为1。
    • ptr2.reset();使ptr2也不再指向对象,引用计数减为0,此时对象被销毁。