class A
{
public:
int iValue;
A(){Print("++");}
~A(){Print("--");}
};
//......................
A m_A[2];
void OnStart()
{
A a;
m_A[0] =a;
m_A[1] = new A();
}
运行,看看有多少次以及何时调用构造函数和析构函数。
m_A[0]=a;在这种情况下,它等于:m_A[0].iValue=a.iValue。
new A(),在这种情况下,创建一个新的对象,让我们称它为temp,然后发生以下情况:m_A[1].iValue=temp.iValue。
它们是等同的
它们是等同的。
完全忘掉这种归属。
完全忘记这项任务。
所以不是我应该忘记,是编译器不应该允许 你这样写。
而目前,它不仅可以编译,而且运行时没有错误!"。
因此,不是我需要忘记,而是编译器不 应该允许 它这样写。
而目前,它不仅可以编译,而且运行时没有错误!"。
编译器允许这样做,因为你可以,如果你知道你在做什么。
class A { public: int iValue; A(){Print("++");} ~A(){Print("--");} }; //...................... A m_A[2]; void OnStart() { A a; m_A[0] =a; m_A[1] = new A(); }
运行,看看有多少次以及何时调用构造函数和析构函数。
m_A[0]=a;在这种情况下,它等于:m_A[0].iValue=a.iValue。
new A(),在这种情况下,创建一个新的对象,让我们称它为temp,然后发生以下情况:m_A[1].iValue=temp.iValue。
运行,看看有多少次以及何时调用构造函数和析构函数。
m_A[0]=a;在这种情况下,它等于:m_A[0].iValue=a.iValue。
这个例子中的第二行是不正确的
你不能将一个指针保存到一个对象中。编译器只是没有注意到这一点。
这个例子中的第二行是不正确的
你不能将一个指针保存到一个对象中。而编译器并没有注意到这一点。
运行,看看有多少次以及何时调用构造函数和析构函数。
m_A[0]=a;在这种情况下,它等于:m_A[0].iValue=a.iValue。
new A(),在这种情况下,创建一个新的对象,让我们称它为temp,然后发生以下情况:m_A[1].iValue=temp.iValue。
这必须是构造函数3,析构函数2。其余的都是正确的。
并发生以下情况:m_A[1].iValue=temp.iValue。
这是第4种解释!))。
那么为什么有必要在输出中调用删除?对于一个临时性的对象?
这是第4种解释!))。
那么为什么输出需要调用删除?对于一个临时性的对象?