gpt4 book ai didi

C++ const 引用成员延长对象的生命周期

转载 作者:太空狗 更新时间:2023-10-29 20:30:30 25 4
gpt4 key购买 nike

这与 a question posted yesterday 有关.

class A
{
public:
mutable int x;
A()
{
static int i = 0;
x = i;
i++;
std::cout << " A()" << std::endl;
}
~A()
{
std::cout << "~A()" << std::endl;
}
void foo() const
{
x = 1;
};
};

class B
{
public:
const A & a;
B(const A & a) : a(a)
{
std::cout << " B()" << std::endl;
}
~B()
{
std::cout << "~B()" << std::endl;
}
void doSomething()
{
a.foo();
};
};

int main()
{
B b((A()));
b.doSomething();
}

现在,a 的析构函数在调用 doSomething 之前被调用。但是,尽管该函数基本上更改了 A 的成员,但该调用仍然有效。它不是同一个实例吗?没有创建其他 A。我使用 A 的构造函数中的静态变量来跟踪它。谁能解释一下?

最佳答案

这是未定义的行为,所以没有语言标准解释。

但是,A 的析构函数不会对存储 x 的内存区域执行任何操作,因此如果您稍后查看那里,该值可能仍然存在.或者,如果您尝试写入该地址,该地址仍然存在。只是不允许您这样做。

关于C++ const 引用成员延长对象的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6955336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com