在显式调用析构函数时,它会执行两次.这是什么原因?
#include <iostream>
using namespace std;
class A
{
public:
int x;
A() { cout << "A's constructor called " << endl; }
~A(){
cout<<"A's desctructor called "<<endl;
}
};
int main()
{
A a;
A b;
a.~A();
}
Run Code Online (Sandbox Code Playgroud)
输出:
称为A的构造
A的desctructor称为
叫A的desctructor
好吧,你把它称为'a',然后当语言超出范围时,'语言'再次称它为'a'.然后,当然,'语言'称之为b.当然,"语言"是指自动范围对象在其范围初始化时被构造,并在范围结束时被破坏的非常基本的规则.
使用显式调用析构函数很少是一个好主意.
您不应该手动调用析构函数,当对象超出范围时,它将自动调用.
手动调用析构函数的唯一地方是当你编写自己的分配器时,但这是一个非常高级的主题,因此经验法则是永远不要手动调用析构函数.
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |