c++ - 在动态分配的结构中初始化引用

标签 c++

有人知道如何在动态分配的结构中初始化引用吗? 或者为什么这不起作用?

#include <stdio.h>
#include <stdlib.h>

class A
{

};

struct S
{
    A& a;
};

int main()
{
    A a;

    S* s=new S;
    s->a=a;

    printf("a addr:%p\n", &a);
    printf("s->a addr:%p\n", &(s->a));
delete s;
    return 0;
}

输出:

a addr:0x7fff95b65aaf
s->a addr:(nil)

最佳答案

您需要在构造函数的初始化列表中初始化引用成员。甚至构造函数的主体也来不及了,因为成员已经初始化,无法更改。

在您的代码中,您正在使用(编译器提供的)默认构造函数,然后在构造对象后尝试设置引用。

试试这个:

struct S
{
    S(A& a_) : a(a_){} 
    A& a;
};

int main()
{
    A a;

    S* s=new S(a);
...

关于c++ - 在动态分配的结构中初始化引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11546311/

相关文章:

c++ - 不同的窗体

c++ - #define 可以被赋予定义的结果吗?

c++ - 如何将库添加到xcode

c++ - 在对象 vector 中找到最大值

c++ - linux c++ 使用现有的浏览器组件?

c++ - x64 CPU 上的原子 16 字节读取

c++ - 如何管理大型阵列

c++ - 如何从 ADO/C++ 调用 MSSQL 系统函数?

c++ - 需要一个散列函数来从 ipv6 16 字节地址和 TCP 2 字节端口号中创建 32 位值

c++ - GmfBridge 不将接收器过滤器与源过滤器连接