msc*_*msc 5 c++ reference heap-memory c++11 c++14
我已经在G ++编译器中编译了以下代码,它工作正常,没有任何错误或警告。
#include <iostream>
int main()
{
int &r = *(new int(100));
std::cout << r << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
参考变量如何与内存分配一起使用?
为参考变量分配内存是否有效?
从C ++标准(5.3.1一元运算符)开始
1一元*运算符执行间接操作:对其应用的表达式应为指向对象类型的指针或为函数类型的指针,并且结果为指向表达式所指向的对象或函数的左值。如果表达式的类型为“ T的指针”,则结果的类型为“ T”。[注意:通过指向不完整类型(cv void除外)的指针进行的间接调用是有效的。 这样获得的左值可以有限的方式使用(例如,初始化引用);该左值不能转换为prvalue,请参见4.1。—尾注]
在此声明中
int &r = *(new int(100));
Run Code Online (Sandbox Code Playgroud)
声明了对通过使用*堆中创建的未命名对象的运算符获得的左值的引用。
最近,您可以使用参考删除对象
delete &r;
Run Code Online (Sandbox Code Playgroud)
考虑一个有关多态的更有趣的例子。
#include <iostream>
int main()
{
struct A
{
virtual ~A()
{
std::wcout << "A::~A()" << std::endl;
}
};
struct B : A
{
~B()
{
std::wcout << "B::~B()" << std::endl;
}
};
A &ra = *(new B);
delete &ra;
}
Run Code Online (Sandbox Code Playgroud)
程序输出为
B::~B()
A::~A()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |