#include <iostream>
#include <stdio.h>

using std::cout;
using std::endl;

class A{
public:
    A(int a):r(a){printf("A::r %p\n", &r);}
    int & r;
};

int main()
{
    cout << sizeof(A)<<endl;
    int a = 0;
    printf("outer a %p\n", &a);
    A b(a);
    return 0;
}

 

首先,sizeof(A)是8(64位系统),因为引用底层是用指针实现的。

 

其次,A的构造函数是有bug的。因为A.r引用的是形参。这个形参在构造函数调用的栈上,构造函数结束后立马销毁。

正确版本:

A(const int &a):r(a){}
posted on 2019-11-15 11:29  newbird2017  阅读(437)  评论(0编辑  收藏  举报