#include <iostream>
using namespace std;
class t{
private:
int * arr;
public:
t() { arr=new int[1]; arr[0]=1;}
t(int x) {arr=new int[1]; arr[0]=x;}
t(const t &);
~t() {cout<<arr[0]<<" de"<<endl; delete [] arr;}
t & operator=(const t & t1){arr[0]=t1.arr[0];return *this;}
void print(){cout<<arr[0]<<endl;}
};
t::t(const t & t1) {arr=new int[1];arr[0]=t1.arr[0];}
int main(){
t b=5;
cout<<"hello"<<endl;
b.print();
b=3;
b.print();
return 0;
}
Почему результатконструктор и конструктор копирования
hello
5
3 de
3
3 de ?
почему "т Ь = 5;" не вызовет деструктор? как работает «t b = 5»? он создает временный объект (класса t), используя сначала конструктор «t (int x)», затем используйте конструктор копирования «t (const t &)», чтобы создать b? Если это так, то почему он не вызывает дескриптор для временного объекта?
@juanchopanza Почему? Какой объект, по вашему мнению, уничтожен до «привет»? Обратите внимание, что 't b = 5;' is ** not ** присваивание, это инициализация. Он использует конструктор 't (int)', а не 'operator ='. –
Извините, неправильно прочитайте свой ответ. Я думал, вы говорили об инициализации. – juanchopanza