Почему деструктор вызывается оператором = функцией
даже несмотря на то, что я передаю рефренированный аргумент t = оператору, что такое разрушитель разрушения......
результат выглядит следующим образом
привет
мир
-------
= вызывается оператор
des называется //для чего нужен этот деструктор
привет
дес называется
дес называется
Что я уже пробовал:
#include <iostream> #include<string.h> using namespace std; class strin{ int len; char *ptr; public: strin(){len=0;ptr=NULL;} strin( const char *s) { len=strlen(s); ptr=new char[len+1]; strcpy(ptr,s); } strin( const strin &A) { len=A.len; ptr=new char[len+1]; strcpy(ptr,A.ptr); cout<<"cpy cnst is called\n"; } void print(void) { cout<<ptr<<"\n"; } strin operator + ( const strin &obj ) { strin temp; temp.len=len+obj.len; temp.ptr=new char[temp.len+1]; strcpy(temp.ptr,ptr); strcat(temp.ptr,obj.ptr); cout<<"+ is called \n"; return temp; } ~strin() { delete[]ptr; cout<<"des is called\n"; } strin operator = (const strin &x) { len=x.len; ptr=new char[len+1]; strcpy(ptr,x.ptr); cout<<"= operator is called\n"; } }; int main() { strin x("hello"); strin y("world"); x.print(); y.print(); cout<<"--------\n"; y=x; y.print(); }
0x01AA
Я думаю, что вам нужно сначала исправить ваш Operator=
подпись, а также возвращаемое значение.const strin& operator=(const strin &rhs)
John R. Shaw
Возвращаемый тип не должен быть const.
T& T::operator=(const T&)
0x01AA
Спасибо за этот намек. Я никогда об этом не думал. Но есть ли у него недостаток, чтобы вернуть const?
Заранее спасибо.
John R. Shaw
Возвращение 'const' нарушает нормальное поведение.
a = b = c; // 'const' или нет 'const' это работает
(a = b) = c; // является законным, но не будет работать, если оператор присваивания возвращает 'const'
Именно поэтому оператор присваивания по умолчанию задается стандартом для возврата 'T&' вместо 'const T&'.
0x01AA
Большое Вам за это спасибо! С уважением.