Sample 4.16:init_ptr.cpp

#include<iostream>
int main()
{
    using namespace std;
    int higgens = 5;
    int * pt = & higgens;

    cout << "Value of higgens = " << higgens
        << "; Address of higgens = " << &higgens << endl;
    cout << "Value of *pt= " << *pt;
        << "; Value of pt = " << pt << endl;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`std::weak_ptr` 是 C++11 引入的智能指针,它用于解决 `std::shared_ptr` 的循环引用问题。`std::weak_ptr` 指向 `std::shared_ptr` 管理的对象,但是不会增加引用计数。因此,即使 `std::shared_ptr` 已经释放了管理的对象,`std::weak_ptr` 仍然可以保持指向该对象的引用,并且可以通过 `lock()` 方法获取一个指向该对象的 `std::shared_ptr`。 `std::weak_ptr.lock()` 方法的作用是获取一个指向 `std::weak_ptr` 所指向的对象的 `std::shared_ptr`。如果 `std::weak_ptr` 已经过期(即所指向的对象已经被释放),则返回一个空的 `std::shared_ptr`。使用 `std::weak_ptr.lock()` 方法需要注意,因为它返回的 `std::shared_ptr` 可能为空,所以在使用之前需要进行检查,以避免访问空指针。 示例代码如下: ```c++ #include <memory> #include <iostream> int main() { std::shared_ptr<int> sp = std::make_shared<int>(42); std::weak_ptr<int> wp = sp; std::shared_ptr<int> sp2 = wp.lock(); if (sp2) { std::cout << "sp2: " << *sp2 << std::endl; } else { std::cout << "wp is expired." << std::endl; } sp.reset(); sp2.reset(); sp2 = wp.lock(); if (sp2) { std::cout << "sp2: " << *sp2 << std::endl; } else { std::cout << "wp is expired." << std::endl; } return 0; } ``` 输出结果为: ``` sp2: 42 wp is expired. ``` 在示例代码中,首先创建了一个 `std::shared_ptr` 对象 `sp`,然后创建了一个 `std::weak_ptr` 对象 `wp`,并将其指向 `sp` 所管理的对象。接着使用 `wp.lock()` 方法获取一个指向该对象的 `std::shared_ptr`,并将其赋值给 `sp2`。由于 `wp` 所指向的对象还未被释放,因此 `sp2` 不为空,输出结果为 `sp2: 42`。然后通过 `sp.reset()` 将 `sp` 置为空,此时 `sp` 不再管理对象,同时 `wp` 也过期了。然后再次调用 `wp.lock()` 方法,此时 `wp` 已经过期,无法获取指向对象的 `std::shared_ptr`,因此输出结果为 `wp is expired.`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值