在询问C++ Error linking in consumer file caused by static data field之后,我为StateConservator的一个实例尝试了两种不同的声明:
StateConservator cs(*pContainer, pDoc->GetConfiguration());
和
StateConservator(*pContainer, pDoc->GetConfiguration());
第一个做了我想要的,它只在范围结束后才传递析构函数。第二个在声明本身的行中传递析构函数。
编译器是否正常运行?如果是正确的行为,在该行中声明匿名变量的方式是什么?
答案 0 :(得分:6)
您不能在C ++中拥有“未命名”对象。在第二种情况下,对象即时创建和销毁,因为它与名称无关。与名称(例如,变量)的关联给出了控制其寿命的对象范围。通过不命名对象,它的生命周期与语句绑定。如果给它一个名称,那么它将被绑定到声明名称的范围。