Ric*_*lly 4 c++ reference object-lifetime
我想知道是否偶然指向绑定到已销毁堆栈变量的const引用的指针可以正常工作.
我读取const引用生命周期是在rvalues上扩展,所以这是"正常"的const引用工作,但是在存储引用的ctor的末尾应该被销毁,不是吗?
const引用生命周期是否也被扩展,因为我在指针中检索它的地址或者这是纯粹的运气?
#include <iostream>
class Storage
{
public:
Storage(const int& ref)
{
p = &ref;
}
const int* Get() const
{
return p;
}
private:
const int* p;
};
int main()
{
Storage* s = nullptr;
{
int someValue = 42;
std::cout << &someValue << std::endl;
s = new Storage(someValue);
}
const int* p = s->Get();
std::cout << p << std::endl;
std::cout << *p << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
它也使用struct Live示例
#include <iostream>
struct Dummy
{
int value;
};
class Storage
{
public:
Storage(const Dummy& ref)
{
p = &ref; // Get address of const reference
}
const Dummy* Get() const
{
return p;
}
private:
const Dummy* p;
};
int main()
{
Storage* s = nullptr;
{
Dummy dummy;
dummy.value = 42;
std::cout << &dummy << std::endl;
s = new Storage(dummy);
}
const Dummy* p = s->Get();
std::cout << p << std::endl;
std::cout << p->value << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
你的s变量确实有一个悬空指针someValue已超出范围.因此,您的代码显示未定义的行为.
关于"const参考生命周期在rvalues上扩展"的注释在某些情况下是正确的,但是someValue是左值.
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |