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-ое толкование!))
Тогда почему на выходе требуется вызвать delete? Для объекта temp?
Это уже 4-ое толкование!))
Тогда почему на выходе требуется вызвать delete? Для объекта temp?