c++ 11 copy assignment
Ostatnio zmodyfikowano 2017-09-21 22:35
aaadam Temat założony przez niniejszego użytkownika |
c++ 11 copy assignment » 2017-09-21 21:27:28 witam, czytam sobie o c++ i natknąłem się na pewien artykuł rule of 5 i zastanawia mnie czy wewnatrz copy assigment nie powinienem usunąć tmp_cstring na końcu bloku czy jak usunę to usunie mi się też this->cstring... pozrawiam class rule_of_five { char * cstring; public: rule_of_five( const char * arg ) : cstring( new char[ std::strlen( arg ) + 1 ] ) { std::strcpy( cstring, arg ); } ~rule_of_five() { delete[] cstring; } rule_of_five( const rule_of_five & other ) { cstring = new char[ std::strlen( other.cstring ) + 1 ]; std::strcpy( cstring, other.cstring ); } rule_of_five( rule_of_five && other ) : cstring( other.cstring ) { other.cstring = nullptr; } rule_of_five & operator =( const rule_of_five & other ) { char * tmp_cstring = new char[ std::strlen( other.cstring ) + 1 ]; std::strcpy( tmp_cstring, other.cstring ); delete[] cstring; cstring = tmp_cstring; return * this; } rule_of_five & operator =( rule_of_five && other ) { if( this != & other ) { delete[] cstring; cstring = other.cstring; other.cstring = nullptr; } return * this; } };
|
|
pekfos |
» 2017-09-21 21:40:42 Raz alokujesz i raz usuwasz, niekoniecznie to samo. Usuwanie więcej nie ma tu sensu i jak sam zauważyłeś, byłoby niepoprawne. |
|
aaadam Temat założony przez niniejszego użytkownika |
» 2017-09-21 21:59:08 to co się stanie z tmp_cstring po wyjściu programu z bloku copy assigmenta ??bo wskaznik istnieje? czy poprostu nie przejmować się tym ? |
|
pekfos |
» 2017-09-21 22:35:08 Ten blok będzie usunięty w destruktorze. Przecież nie tracisz tego adresu, tylko zapisujesz w obiekcie. |
|
« 1 » |