c++ - 范围指针和重置
问题描述
我正在玩提升范围的指针,但我不明白这种行为:
#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指向的地址吗?如果使用范围数组而不是范围指针并打印上面代码中第一个元素指向的地址,就会出现这种情况。
解决方案
当你这样做
std::cout << &p << '\n';
您得到的是 的地址p
,而不是p
指向的地址。为了得到你需要的
std::cout << static_cast<void*>(p.get()) << '\n';
在这个static_cast<void*>()
例子中并不真正需要打印一个指针,除了char*
/const char*
会给你它的地址,但我添加它只是为了安全。
推荐阅读
- android - Jenkins Google Play Android Publisher 插件 androidApkMove 不在轨道之间移动发行说明
- plpython - 如何在 AgensGraph 中通过 pl/python 使用图形数据类型?
- ios - 如何在 Swift 中将“T”类型的“序列”作为参数传递?
- java - javax.naming.Reference 与 org.hibernate.SessionFactory 不兼容
- jquery - jQuery:几个单词的首字母大写,其余的小写
- php - 在 codeigniter 中加载控制器
- javascript - 在javascript左右与左右分配值给const
- javascript - jquery左右滑动到div下一个或后退
- json - 将json文件读取为json字符串并在jsr223采样器中提取数据,groovy作为jmeter中的语言
- c# - http请求按钮。目的地无法到达