English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Os problemas encontrados ao usar new para inicializar o membro ponteiro do objeto
Ao usar new para inicializar o membro ponteiro no construtor, o destrutor deve usar delete, e new deve corresponder a delete, new[] deve corresponder a delete[].
Em casos de múltiplos construtores, deve-se usar new da mesma forma, ou usar new ou new[], pois há apenas um destrutor, todos os construtores devem ser compatíveis com o destrutor.
PS. Claro, ao inicializar ponteiros com new no construtor, você pode inicializar o ponteiro como vazio (0/NULL ou C++11nullptr), pois delete, com ou sem [], é compatível com ponteiros nulos.
É necessário definir manualmente um construtor de cópia e um construtor de atribuição, inicializar um objeto em outro objeto usando cópia profunda, como: uma cópia para outra, como mostrado a seguir:
Construtor de cópia:
String:String(const String & st) { num_Strings++; len = st.len; str = new char[len+1]; std::strcpy(str, st.str); }
Construtor de atribuição:
String & String:operator=(const String & st) { if(this == &st) return *this; else delete [] str; len = st.len; str = new char[len+1]; std::strcpy(str, st.str); return *this; }
Isso é tudo o que há no artigo, espero que o conteúdo deste artigo possa ajudar você a aprender ou trabalhar, e também espero que você dê mais apoio ao tutorial de gritaria!
Declaração: O conteúdo deste artigo é de propriedade da internet, pertence ao autor original, o conteúdo é contribuído e carregado voluntariamente pelos usuários da internet, este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidade por questões legais relacionadas. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie um e-mail para: notice#w3Aviso: O conteúdo deste artigo foi extraído da internet, pertence ao autor original, o conteúdo foi contribuído e carregado voluntariamente pelos usuários da internet, este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidade por questões legais relacionadas. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie um e-mail para: notice#w