为什么要调用析构函数

尼科洛·扎扎(Niccolo Zaza)

这是我一直试图了解其工作方式的代码。

#include <iostream>

using namespace std;

class A
{
public:
    int variable;

    A()
    {
        cout << "Default Constructor\n";
    }

    A(int variable_)
    {
        cout << "Overloaded Constructor\n";
        variable = variable_;
    }

    A(A& Object)
    {
        cout << "Copy Constructor\n";
        variable = Object.variable;
    }

    ~A()
    {
        cout << "Destructor\n";
    }
};

void main()
{
    {
        A* PA1 = new A(1);

        cout << "\n";

        A* PA2 = &(A(*(PA1)));

        cout << "Second\n\n";

        A* PA3 = &(A(1));

        cout << "\n";

        A* PA4 = new A(*(PA3));
    }



    cout << "\n";
    system("pause");
}

为什么在初始化之后调用析构函数PA2这是什么意思&(A(*(PA1))) and &(A(1))

这是此代码的输出:

在此处输入图片说明

雅各布·H

&(A(*(PA1)))调用A(*(PA1))并返回指向变量的指针。因为这是构造函数,所以它返回类型为的变量A,并且因为要给它传递类型为A的变量,所以它将调用复制构造函数。这不是很好的代码,因为返回位于临时内存中。其行为是不确定的,因此在编写代码时切勿使用此行为。

&(A(1)) 执行与上述相同的操作,但是调用了一个接受int的构造函数,因为这就是您要传递给它的内容。

调用析构函数的原因是因为C ++自动销毁了未使用的变量/作用域已过期的变量。因此,当您在不使用new关键字的情况下调用构造函数时,即会创建对象,但不会将其存储在任何地方。您存储其地址,如上所述,这是未定义的行为。因此,构造函数返回的值(由于这个原因称为临时值)会立即被销毁。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么不能在析构函数可以的同时显式调用构造函数?

为什么调用从对象移出的析构函数?

为什么析构函数被调用两次?

为什么要尝试两次查找析构函数?

如果析构函数被删除,为什么要调用它,而如果不删除它,为什么不调用它呢?

为什么析构函数比构造函数调用得更多?

为什么析构函数调用两次表单?

为什么要调用派生类的析构函数?

为什么在执行复制之前调用析构函数?

为什么析构函数挂起

为对象分配值时为什么调用构造函数和析构函数

为什么在Friend函数中调用析构函数

什么时候在C ++中调用要调用的对象的析构函数?

为什么不调用继承类的析构函数?

为什么代码两次调用析构函数?

为什么析构函数被调用两次而构造函数仅被调用一次?

为什么std :: vector的构造函数调用自定义类的析构函数?

为什么在构造时调用C ++类的析构函数?

为什么在调用luaL_error时未调用C ++对象析构函数?

为什么我的类析构函数立即被调用?

为什么在复制分配期间调用析构函数?

当将对象作为参数传递时,为什么要调用析构函数但不调用构造函数?

C ++我听不懂为什么要调用“父类静态函数”,而只调用父析构函数

为什么在此处调用析构函数以及在调用该对象析构函数后如何调用对象成员函数?

析构函数调用

为什么在“返回 0”后调用析构函数?

为什么 C++ 线程多次调用析构函数?

为什么在父类之前调用子类的析构函数?

为什么不调用析构函数?

TOP 榜单

热门标签

归档