这是我一直试图了解其工作方式的代码。
#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))
?
这是此代码的输出:
&(A(*(PA1)))
调用A(*(PA1))
并返回指向变量的指针。因为这是构造函数,所以它返回类型为的变量A
,并且因为要给它传递类型为A的变量,所以它将调用复制构造函数。这不是很好的代码,因为返回位于临时内存中。其行为是不确定的,因此在编写代码时切勿使用此行为。
&(A(1))
执行与上述相同的操作,但是调用了一个接受int的构造函数,因为这就是您要传递给它的内容。
调用析构函数的原因是因为C ++自动销毁了未使用的变量/作用域已过期的变量。因此,当您在不使用new
关键字的情况下调用构造函数时,即会创建对象,但不会将其存储在任何地方。您存储其地址,如上所述,这是未定义的行为。因此,构造函数返回的值(由于这个原因称为临时值)会立即被销毁。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句