c++ - C++中的构造函数和析构函数

标签 c++ visual-c++ c++builder

你能告诉我为什么我不添加"getch()"或"system("pause")"吗,结果在第一个代码中是正确的,否则在第二个代码中显示缺少部分析构函数中的代码

    #include "iostream.h"
    class chucmung1
    {
     public :
         chucmung1()
         {
                    cout <<"chuc mung ban nam moi an khang thinh vuong\n";

         }
         ~chucmung1()
         {
                     cout <<"Nam Tan Ty\n";
         }


    };

  //  the first code
     int main()
     {
      chucmung1 object;
      system("pause > NULL");    
     }

  // the second code 
        int main()
     {
      chucmung1 object;
     } 

在第一个代码中,结果是 “chuc mung ban nam moi an khang thinh vuong”

在第二个代码中,结果是 "chuc mung ban nam moi an khang thinh vuong 南新泰” 在这种情况下,控制台不会在显示结果后暂停。

最佳答案

Can you tell why i don't add "getch()" or "system("pause")", the result is right in the first code

object 超出范围并在 main() 退出时销毁。该代码示例中没有任何内容阻止 main() 退出,因此 object 被立即销毁。

else in the second code display to lack code in part destructor

getch/pause 正在延迟 main() 退出,并且 object 仍在范围内在暂停的时候,所以它还没有被销毁。

如果你想在暂停代码之前销毁object,你可以将object放入另一个作用域,这样它就可以更早地被销毁:

int main()
{
    {
        chucmung1 object;
    }
    system("pause > NULL");    
}

关于c++ - C++中的构造函数和析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24131100/

相关文章:

c++ - 在 C++20 模块中打破循环依赖的前向声明不起作用

c++ - 获取文件堆栈跟踪的工具

c++ - 0x00B67361 处未处理的异常

c++ - 神秘的链接器警告 : public symbol defined in both modules

c++ - 使用 SQlite 在 QT5 上关闭和打开数据库时出错

c++ - 为什么 c 位域中的 unsigned int 值变成了 signed 值?

c++ - 返回指针而不是 vector::迭代器并将 vector::迭代器转换为指针

c++ - 虚幻引擎调用这些宏...现在在 C++ 中这正常吗?

c++ - bcc32 : strange error when specialising on `std::vector<bool>`

c++ - 将 Vcl::Controls::TCaption aka (System::UnicodeString) 转换为 const char *