// 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引用它的ctor转换为一个int,然后我将一个临时的int传递给它。 温度在新的之后被摧毁。为什么我仍然可以打印出d_member?
答案 0 :(得分:6)
您的构造函数初始化列表将整数参数复制到成员变量。成员变量的生命周期是对象的生命周期。
答案 1 :(得分:6)
正如其他人已经提到的非引用成员变量一样,构造函数调用只是复制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
答案 2 :(得分:3)
是的,temp
已被销毁,但在此之前,它是在d_member(in)
初始化期间复制的。所以这里没有错误