如果非动态变量被指针引用,何时超出范围?
When does a non-dynamic variable goes out of scope if being referenced by a pointer?
我是C++编程新手,我很难理解一些概念。
以这段代码为例:
// Example program
#include <iostream>
class nber
{
int* value;
public:
nber(int n)
{
value = &n;
}
int getNber()
{
return *value;
}
};
int main()
{
nber var(111);
std::cout << "The number is:" << var.getNber() << "n";
}
如您所见,nber 构造函数接收一个整数 n 并将其地址传递给 "value" 指针。我期望的是有某种不需要的行为,因为接收到的整数 (n( 的作用域在构造函数结束时立即结束,但输出是:
数字是:111
所以范围没有结束?如果它真的没有结束,用于存储变量 n 的内存何时释放?谢谢。
范围确实结束了。你看到的是未定义的行为 - 任何事情都可能发生。就规则而言,这个数字可能是"紫色的"。或者您的硬盘可能会被删除。不过,后者有点罕见。
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 尝试通过多个向量访问变量时,向量下标超出范围
- 何时在引用或唯一指针上使用移动语义
- 错误:未在此范围内声明'reverse'
- 正在将指针转换为范围
- 使用std::transform将一个范围的元素添加到另一个范围中
- 何时提供默认参数作为模板参数
- 在基于范围的for循环中使用结构化绑定声明
- C++-明确何时以及如何调用析构函数
- 如何计算数据类型的范围,例如int
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 模板转换为超类
- 如果非动态变量被指针引用,何时超出范围?
- 在编译时何时计算范围::视图?
- 在命名成员函数重载解析期间,"this"何时不在范围内?
- thread.detach() 函数的左值何时会超出以下代码的范围
- 成员函数何时超出范围
- 临时参数值何时超出范围
- 何时分配块范围变量
- 何时在C++中使用"::"进行全局范围?