对象生命周期通常与范围有关,但是当在函数内部创建对象时,事情变得有点模糊(至少对我而言)。检查以下代码:
#include <iostream>
#include <string>
using namespace std;
struct ins
{
ins() : _num(++num) { cout << "ctor " << _num << endl; }
~ins() { cout << "dtor " << _num << endl; }
int get() { return _num; }
static int num;
int _num;
};
int ins::num = 0;
ins geti() { return {}; }
void usei(int i) { cout << "using " << i << endl; }
int main()
{
usei(geti().get());
cout << endl;
usei(geti().get());
}
输出
ctor 1
使用1
dtor 1
ctor 2
使用2
dtor 2
长话短说,我想知道在这种情况下是否有办法“计算”对象的生命周期。我怎么知道每个对象绑定的功能?我现在的心理模型对我的影响并不大。
答案 0 :(得分:1)
在深入研究cppreference后,我在object lifetime找到了一个部分。显然我的心理模型是错误的。
在这种情况下,Lifetime不会绑定到函数,而是绑定到表达式。我的情况属于临时对象生存期,由
创建在这种情况下,适用以下规则:
所有临时对象都被销毁,作为评估的最后一步 表达式(词法上)包含它们所在的点 创建,如果创建了多个临时对象,它们就是 按照与创造顺序相反的顺序销毁。这是真的 即使该评估以抛出异常而告终。