C++ 中什么时候调用构造函数?


在本文中,我们将讨论构造函数的调用时机。本文中包含不同类型的构造函数,包括全局、局部、静态局部和动态构造函数。

对于全局对象,构造函数会在进入 main 函数之前被调用。

示例

#include <iostream>
using namespace std;
class MyClass {
   public:
      MyClass() {
         cout << "Calling Constructor" << endl;
      }
};
MyClass myObj; //Global object
int main() {
   cout << "Inside Main";
}

输出

Calling Constructor
Inside Main

当对象是非静态时,构造函数会在执行到达创建对象的位置时被调用。

示例

#include <iostream>
using namespace std;
class MyClass {
   public:
      MyClass() {
         cout << "Calling Constructor" << endl;
      }
};
int main() {
   cout << "Inside Main\n";
   MyClass myObj; //Local object
   cout << "After creating object";
}

输出

Inside Main
Calling Constructor
After creating object

当对象是局部静态时,其构造函数只会第一次被调用,如果再次使用同一个函数,则不会受到影响。

示例

#include <iostream>
using namespace std;
class MyClass {
   public:
      MyClass() {
         cout << "Calling Constructor" << endl;
      }
};
void func() {
   static MyClass myObj; //Local static object
}
int main() {
   cout << "Inside Main\n";
   func();
   cout << "After creating object\n";
   func();
   cout << "After second time";
}

输出

Inside Main
Calling Constructor
After creating object
After second time

最后,对于动态对象,当使用 new 运算符创建对象时,构造函数会被调用。

示例

#include <iostream>
using namespace std;
class MyClass {
   public:
      MyClass() {
         cout << "Calling Constructor" << endl;
      }
};
int main() {
   cout << "Inside Main\n";
   MyClass *ptr;
   cout << "Declaring pointer\n";
   ptr = new MyClass;
   cout << "After creating dynamic object";
}

输出

Inside Main
Declaring pointer
Calling Constructor
After creating dynamic object

更新于:2019 年 7 月 30 日

576 次浏览

为您的职业开启新篇章

完成课程并获得认证

开始学习
广告
© . All rights reserved.