繁体   English   中英

C ++中带有参考变量的内存分配

[英]Memory allocation with reference variable in C++

我已经在G ++编译器中编译了以下代码,它工作正常,没有任何错误或警告。

#include <iostream>             
int main()                      
{                               
    int &r = *(new int(100));   
    std::cout << r << std::endl;
    return 0;                   
}

参考变量如何与内存分配一起使用?

为参考变量分配内存是否有效?

从C ++标准(5.3.1一元运算符)开始

1一元*运算符执行间接操作:应用该表达式的表达式应为指向对象类型的指针或为函数类型的指针,并且结果为指向表达式所指向的对象或函数的左值。 如果表达式的类型为“ T的指针”,则结果的类型为“ T”。 [注意:通过指向不完整类型(cv void除外)的指针进行的间接调用是有效的。 这样获得的左值可以有限的方式使用(例如,初始化引用) 该左值不能转换为prvalue,请参见4.1。 —尾注]

在此声明中

int &r = *(new int(100));

声明了对使用堆中创建的未命名对象的运算符*获得的左值的引用。

最近,您可以使用参考删除对象

delete &r;

考虑一个有关多态的更有趣的例子。

#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;
}

程序输出为

B::~B()
A::~A()

new运算符返回一个指针,该指针指向为您分配的任何内容。 当取消引用指针时,将获得对其所指向的值的引用。 就那么简单。

自C以来就是这样(尽管引用不是一个明确的东西)。 它允许这样的代码:

void modify_my_int(int* the_int) { *the_int = 4; }

int main(void)
{
    int var;
    modify_my_int(&var);
    printf("%d\n", var); // prints "4"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM