// Example program
#include <iostream>
#include <string>
struct foo
{
int d_member;
foo(const int & in):
d_member(in){};
};
int main()
{
foo *p;
{
int temp = 5;
p = new foo(temp);
}
std::cout << p->d_member << std::endl;
return 0;
}
foo将const ref与int的ctor进行,我通过了一个临时的int。新临时被摧毁。为什么我仍然能够打印出D_Member?
您的构造函数初始化列表 copies 成员变量的整数参数。您的会员变量的寿命是您对象的寿命。
正如其他已提到的非参考成员变量所述的其他构造函数调用简单从 const
参考参数复制值(如果您通过参考或值传递,甚至无关紧要(。
如果您的成员变量是参考
,您的情况会有所不同struct foo
{
const int& d_member; // <<<< reference member variable
foo(const int & in): d_member(in){};
};
在这种情况下,访问范围块后访问 d_member
会增加不确定的行为:
{
int temp = 5;
p = new foo(temp);
}
std::cout << p->d_member << std::endl; // <<<< Undefined behavior
是的, temp
被破坏,但在此之前,在d_member(in)
初始化过程中已复制。所以这里没有任何错误