首页 > 解决方案 > 范围指针和重置

问题描述

我正在玩提升范围的指针,但我不明白这种行为:

#include <iostream>
#include <boost/scoped_ptr.hpp>

int main()
{

    boost::scoped_ptr<int> p{new int{1}};
    std::cout << &p << '\n';
    p.reset(new int {2});
    std::cout << &p << '\n';

    return 0;
}

我得到以下输出:

0x7fff5fbff650
0x7fff5fbff650

复位函数不应该改变p指向的地址吗?如果使用范围数组而不是范围指针并打印上面代码中第一个元素指向的地址,就会出现这种情况。

标签: c++boostscoped-ptr

解决方案


当你这样做

std::cout << &p << '\n';

您得到的是 的地址p,而不是p指向的地址。为了得到你需要的

std::cout << static_cast<void*>(p.get()) << '\n';

在这个static_cast<void*>()例子中并不真正需要打印一个指针,除了char*/const char*会给你它的地址,但我添加它只是为了安全。


推荐阅读