c+中构造函数和析构函数的执行顺序+; 我有C++小代码,有构造函数和析构函数。 #include <iostream> using namespace std; class K { public: K(){cout<< "3 ";} ~K(){cout<< "1 ";} }; int main() { { K a; { K b; } { K c; } } system("pause"); return 0; } #包括 使用名称空间std; 类K{ 公众: K(){cout

c+中构造函数和析构函数的执行顺序+; 我有C++小代码,有构造函数和析构函数。 #include <iostream> using namespace std; class K { public: K(){cout<< "3 ";} ~K(){cout<< "1 ";} }; int main() { { K a; { K b; } { K c; } } system("pause"); return 0; } #包括 使用名称空间std; 类K{ 公众: K(){cout,c++,constructor,destructor,C++,Constructor,Destructor,如果代码正确对齐,您的代码将更容易理解: int main() { { K a; // a is being constructed { K b; // b is being constructed } // b is being destructed { K c; // c is being constructed } // c is being

如果代码正确对齐,您的代码将更容易理解:

int main() 
{ 
    { 
        K a;  // a is being constructed
        { 
            K b; // b is being constructed
        } // b is being destructed
        { 
            K c; // c is being constructed
        } // c is being destructed
    } // a is being destructed

    system("pause");
    return 0; 
}
一般规则是,本地(自动)分配的变量只在其作用域内存在

{
    SomeType a; // Creation
} // all local variables from matching { are destroyed

为什么有
{ka;{kb;}{kc;}
你的做法?有什么特别的原因吗?或者你只是在玩弄范围?如果其中一个答案解决了你的问题,请不要忘记将其标记为已接受。这将有助于你的问题的未来访问者。如何标记为已接受?@AhmedMasud如果你在之前讨论我文章内容的更改,我将不胜感激它的编辑。@Spook抱歉,这是一个小的编辑,我想我应该把解释放在解释框里给你。编辑之前你有我的投票权,如果你愿意,你可以撤销它。@AhmedMasud在这种情况下,我同意你的意见,但总是给作者一个机会讨论他的答案的内容。我会留下你的意见e、 这就不那么令人困惑了。@Spook再次:-)很抱歉,编辑太琐碎了,不需要讨论,但我们正在讨论:-)所以我想这并不像我想象的那样节省时间。