MST

星途 面试题库

面试题:C++中std::weak_ptr如何进行过期检查

在C++中,阐述std::weak_ptr过期检查的常用方法,并通过一段简单代码示例说明如何判断一个std::weak_ptr是否过期。
39.4万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 常用方法
    • 使用 expired() 成员函数,它返回一个 bool 值,若 weak_ptr 所指向的对象已被释放(过期),则返回 true,否则返回 false
    • 使用 lock() 成员函数,若 weak_ptr 所指向的对象未过期,lock() 会返回一个有效的 std::shared_ptr,指向该对象;若过期,则返回一个空的 std::shared_ptr。可以通过检查 lock() 返回的 shared_ptr 是否为空来判断 weak_ptr 是否过期。
  2. 代码示例
#include <iostream>
#include <memory>

int main() {
    std::shared_ptr<int> sharedPtr = std::make_shared<int>(42);
    std::weak_ptr<int> weakPtr = sharedPtr;

    // 使用 expired() 检查
    if (weakPtr.expired()) {
        std::cout << "weakPtr has expired." << std::endl;
    } else {
        std::cout << "weakPtr has not expired." << std::endl;
    }

    // 释放 sharedPtr
    sharedPtr.reset();

    // 使用 lock() 检查
    std::shared_ptr<int> lockedPtr = weakPtr.lock();
    if (lockedPtr) {
        std::cout << "weakPtr has not expired, value: " << *lockedPtr << std::endl;
    } else {
        std::cout << "weakPtr has expired." << std::endl;
    }

    return 0;
}